通过引用: Android WorkManager api for running daily task in Background
它使用WorkManager.enqueueUniquePeriodicWork
确保不会多次创建 PeriodicWorkRequest 。
示例代码:
val work = PeriodicWorkRequestBuilder<SyncWork>(15,TimeUnit.MINUTES).build()
WorkManager.getInstance().enqueueUniquePeriodicWork("TaskTag",
ExistingPeriodicWorkPolicy.KEEP, work);
但是,我发现ExistingPeriodicWorkPolicy
有2个选项,ExistingPeriodicWorkPolicy.KEEP
和ExistingPeriodicWorkPolicy.REPLACE
都可以使用。
我尝试实现它并运行代码,但是它确实显示出任何差异,而且似乎两者的行为方式相同。
我的不确定性:
ExistingPeriodicWorkPolicy.KEEP
与ExistingPeriodicWorkPolicy.REPLACE
有何不同?
答案 0 :(得分:2)
在您的示例中,您将排队一个新的工作请求(也就是工作人员)。 如果您是在运行时之前完成此操作的,则此工作程序已经处于状态ENQUEUED。
保持:如果先前的工作人员存在,则您的新尝试将被忽略,否则您的新工作人员将被排队。
REPLACE:如果先前的工作人员存在,则将其取消,从而导致其状态为CANCELED。否则,您的新工作人员将入队。
因此,如果您确定新工作人员与先前的工作人员相同(例如,约束未更改),则KEEP应该是安全的,否则REPLACE可能是更好的选择。
答案 1 :(得分:0)
保持::如果现有的待处理工作具有相同的唯一名称,则什么也不做。
替换::如果存在具有相同唯一名称的待处理作品,请取消并删除它。