Android 工作管理器 - ExistingPeriodicWorkPolicy.KEEP 和 .Replace 之间的区别

Android Work Manager - Difference between ExistingPeriodicWorkPolicy.KEEP and .Replace

参考: 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 的表现有何不同?

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

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

在您的示例中,您将要排队一个新的工作请求 (a.k.a.worker)。 如果您之前在运行时执行过此操作,则此 worker 已经存在且状态为 ENQUEUED。

KEEP:如果之前的 worker 存在,您的新尝试将被忽略,否则您的新 worker 将被排队。

REPLACE:如果之前的 worker 存在,它将被取消,导致它的状态为 CANCELED。然后,否则,您的新工人已入队。

所以,如果你确定你的新工人和以前的工人一样(比如约束没有改变),那么 KEEP 应该是安全的,否则 REPLACE 可能是更好的选择。