通过参考:用于在后台中运行日常任务的Android WorkManager api
它使用WorkManager.enqueueUniquePeriodicWork
来确保不会多次创建PeriodicWorkRequest。
示例代码:
val work = PeriodicWorkRequestBuilder<SyncWork>(15,TimeUnit.MINUTES).build()
WorkManager.getInstance().enqueueUniquePeriodicWork("TaskTag",
ExistingPeriodicWorkPolicy.KEEP, work);
然而,我发现ExistingPeriodicWorkPolicy
有两个选项,即ExistingPeriodicWorkPolicy.KEEP
和ExistingPeriodicWorkPolicy.REPLACE
可以使用。
我试图实现它并运行代码,但它确实显示了任何差异,而且两者的行为方式似乎相同。
我的不确定性:
ExistingPeriodicWorkPolicy.KEEP
与ExistingPeriodicWorkPolicy.REPLACE
的性能有何不同?
在您的示例中,您将要对一个新的工作请求(也称为worker(进行排队。如果您刚刚在运行时执行过此操作,则此工作程序已经存在状态ENQUEUED。
KEEP:如果前一个工作人员存在,那么您的新尝试将被忽略,否则您的新工作人员将被排队。
REPLACE:如果前一个工作人员存在,它将被取消,导致其状态为CANCELED。然后,或者,您的新工作人员将入队。
因此,如果你确信你的新员工与前一个员工相同(比如约束没有改变(,那么KEEP应该是安全的,否则REPLACE可能是更好的选择。
KEEP:如果存在具有相同唯一名称的现有挂起工作,则不执行任何操作。
替换:如果存在具有相同唯一名称的现有挂起工作,请取消并删除它。