可以自定义工作管理器在重新启动后的行为吗?



我正在为我的一些用例探索使用WorkManager的选项,在这些用例中,工作项需要在计划的延迟后执行。基于实验,我注意到的这种行为

  1. WorkManager可以很好地处理工作项的调度,并且即使在重新启动后,只要设备关闭时没有经过延迟,WorkManager也会尊重配置的延迟
  2. 如果设备处于关闭状态时某些工作项的延迟已经过去,则一旦设备重新启动,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获得的唯一信息是其状态(ENQUEUED、RUNNING、SUCCEDED、FAILED、BLOCKED、CANCELLED(、runAttemptCount和输出。你将需要自己实施它。将员工结束的时间保存在SharedPreferences中。当设备重新启动并最终使用ExistingWorkPolicy.REPLACE 重新排队时,请检查此时间

最新更新