【问题标题】:Android Work Manager - Difference between ExistingPeriodicWorkPolicy.KEEP and .ReplaceAndroid 工作管理器 - ExistingPeriodicWorkPolicy.KEEP 和 .Replace 之间的区别
【发布时间】:2018-08-01 07:45:20
【问题描述】:

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

【问题讨论】:

    标签: android kotlin android-jetpack android-workmanager


    【解决方案1】:

    在您的示例中,您即将加入一个新的工作请求(又名工作人员)。 如果您之前在运行时执行过此操作,则该工作人员已经存在状态为 ENQUEUED。

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

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

    所以,如果您确定您的新工作人员与前一个工作人员相同(例如约束没有改变),那么 KEEP 应该是安全的,否则 REPLACE 可能是更好的选择。

    【讨论】:

    • 如果我只是将repeatInterval 更改为定期工作(例如,我希望它更频繁地运行),我应该使用什么?使用KEEP 会遵守新的重复间隔吗?
    • @PrimožKralj 你应该更换,否则时间间隔更改将被忽略。
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2013-09-09
      • 2014-09-04
      • 1970-01-01
      • 2011-04-27
      • 1970-01-01
      • 2016-11-29
      • 2013-11-05
      • 2014-04-13
      • 1970-01-01
      相关资源
      最近更新 更多