如何解决可以自定义重启后的WorkManager行为吗?
我正在探索针对某些用例使用WorkManager的选项,这些用例需要在计划的延迟后执行工作项。根据实验,我注意到了这种行为
- 只要关闭设备后延迟还没有过去,WorkManager就可以优雅地处理工作项的计划并尊重配置的延迟,即使重新启动后也是如此。
- 如果设备处于关闭状态时某些工作项的延迟已经过去,则一旦重新启动设备,WorkManager最终将同时对所有此类工作项起作用(不再考虑延迟)。
我正在观察预期的行为吗?如果是这样的话 , 有没有一种方法可以自定义上面2中的行为?基本上,我问重启后是否可以遵守相同的延迟。可能可以通过保存一些状态来做到这一点,以便可以区分经过延迟的工作项,但希望检查WorkManager本身是否提供了用于自定义此行为的接口。
作为参考,这是我如何初始化WorkManager并在设置的延迟(在此示例中为5分钟)后安排工作的方式
OneTimeWorkRequest workItem =
new OneTimeWorkRequest.Builder(MyWork.class)
.setInitialDelay(30000,TimeUnit.MILLISECONDS)
.build();
WorkManager.getInstance()
.beginUniqueWork(<some_id>,ExistingWorkPolicy.KEEP,workItem)
.enqueue();
解决方法
WorkManager不提供这种功能。您可以从Worker那里获得的唯一信息是其状态(入队,正在运行,成功,失败,已阻止,已取消),runAttemptCount和输出。 您将需要自己实施。保存在SharedPreferences中的时间是您的工作人员结束的时间。并检查这次设备重新启动并最终通过ExistingWorkPolicy.REPLACE重新让您的工作人员入队
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。