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

11
通过参考: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有两种选项可供选择,即ExistingPeriodicWorkPolicy.KEEPExistingPeriodicWorkPolicy.REPLACE
我尝试实施并运行代码,但它似乎没有显示任何区别,两者的表现方式似乎相同。
我的疑问是:ExistingPeriodicWorkPolicy.KEEPExistingPeriodicWorkPolicy.REPLACE之间有何不同表现?
2个回答

16

在你的示例中,你将要入队一个新的工作请求(也称为worker)。 如果在运行时之前已经执行过这个操作,那么该worker以ENQUEUED状态存在。

保留:如果先前有一个worker存在,则您的新尝试将被简单地忽略,否则您的新worker将被入队。

替换:如果先前存在一个worker,则它将被取消,导致其状态为CANCELLED。然后或者,您的新worker将被入队。

因此,如果您确定您的新worker与先前的worker相同(比如说约束条件没有改变),那么保留应该是安全的选择,否则替换可能是更好的选项。


1
如果我刚刚更改了定期工作的“repeatInterval”(例如,我希望它运行得更频繁),那么我应该使用什么?使用“KEEP”会遵守新的重复间隔吗? - c0dehunter
1
@PrimožKralj,你应该用REPLACE代替,否则时间间隔的更改将被忽略。 - Raunak Sett

5

保留:如果已经存在带有相同唯一名称的待处理工作,则不执行任何操作。

替换:如果已经存在带有相同唯一名称的待处理工作,则取消并删除它。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接