Jos*_*hua 8 android kotlin android-workmanager
val request = PeriodicWorkRequestBuilder<FooWorker>(1, TimeUnit.DAYS).build()
WorkManager.getInstance().enqueueUniquePeriodicWork(
"FOO",
ExistingPeriodicWorkPolicy.REPLACE,
request
)
Run Code Online (Sandbox Code Playgroud)
上面的代码是在RANonCreate的Application,以确保该请求被排入队列。但是,这会导致一个问题,即FooWorker每次用户启动应用程序时都会运行,因为ExistingPeriodicWorkPolicy.REPLACE取消以前的工作并将新工作加入队列,导致它立即运行。
如果我们更改为ExistingPeriodicWorkPolicy.KEEP,即使期间或工作人员更改,我们也无法替换工作。
有没有办法在当前运行后替换请求?
例如,原始请求每天运行 1 次,新请求每小时运行 1 次。运行下一个原始请求后,将其替换为新请求。
没有办法以一种干净的方式通过定期工作来做你想做的事情。
但是,绝对不需要使用定期工作本身。通过在doWork方法结束时安排下一个 WorkRequest ,就在返回之前,可以轻松实现相同的结构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
}
Run Code Online (Sandbox Code Playgroud)
有了这个设置,您onCreate()的Application可以放心地使用ExistingWorkPolicy.KEEP,以避免重新安排工作,如果你已经有了一个WorkRequest排队,并当排队工作大火,接下来WorkRequest会与相应的新的周期来排队。
| 归档时间: |
|
| 查看次数: |
2661 次 |
| 最近记录: |