Android Work Manager-ExistingPeriodicWorkPolicy.KEEP和.Replace之间的区别

时间:2018-08-01 07:45:21

标签: android kotlin android-jetpack android-workmanager

通过引用: 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.KEEPExistingPeriodicWorkPolicy.REPLACE都可以使用。

我尝试实现它并运行代码,但是它确实显示出任何差异,而且似乎两者的行为方式相同。

我的不确定性:

ExistingPeriodicWorkPolicy.KEEPExistingPeriodicWorkPolicy.REPLACE有何不同?

2 个答案:

答案 0 :(得分:2)

在您的示例中,您将排队一个新的工作请求(也就是工作人员)。 如果您是在运行时之前完成此操作的,则此工作程序已经处于状态ENQUEUED。

保持:如果先前的工作人员存在,则您的新尝试将被忽略,否则您的新工作人员将被排队。

REPLACE:如果先前的工作人员存在,则将其取消,从而导致其状态为CANCELED。否则,您的新工作人员将入队。

因此,如果您确定新工作人员与先前的工作人员相同(例如,约束未更改),则KEEP应该是安全的,否则REPLACE可能是更好的选择。

答案 1 :(得分:0)

保持::如果现有的待处理工作具有相同的唯一名称,则什么也不做。

替换::如果存在具有相同唯一名称的待处理作品,请取消并删除它。