val request = PeriodicWorkRequestBuilder<FooWorker>(1, TimeUnit.DAYS).build()
WorkManager.getInstance().enqueueUniquePeriodicWork(
"FOO",
ExistingPeriodicWorkPolicy.REPLACE,
request
)
上面的代码运行在onCreate
of Application
以确保请求已排队。然而,这会导致一个问题,即FooWorker
每次用户启动应用程序时都会运行,因为ExistingPeriodicWorkPolicy.REPLACE
取消以前的工作并将新工作放入队列,使其立即运行。
如果我们改为ExistingPeriodicWorkPolicy.KEEP
,即使期间或工人发生变化,我们也无法更换工作。
有没有办法在当前请求运行后替换该请求?
例如,原始请求每天运行 1 次,新请求每小时运行 1 次。运行下一个原始请求后,将其替换为新请求。
没有办法以干净的方式完全按照您想要的方式进行定期工作。
但是,完全没有必要使用周期性工作本身。通过在您的任务结束时安排下一个 WorkRequest 可以轻松完成相同的结构doWork
方法,在返回之前Result.SUCCESS
:
fun doWork(): Result {
reallyDoWork()
// Now schedule the next "periodic" work
val request = OneTimeWorkRequestBuilder<FooWorker>().build()
WorkManager.getInstance().enqueueUniqueWork(
"FOO",
ExistingWorkPolicy.REPLACE,
request
)
return Result.SUCCESS
}
通过此设置,您的onCreate()
of Application
可以安全使用ExistingWorkPolicy.KEEP
为了避免重新安排工作,如果您已经有一个 WorkRequest 排队,并且当该排队工作触发时,下一个 WorkRequest 将按照适当的新周期排队。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)