WorkManager setRequiresDeviceIdle令人困惑

时间:2019-02-18 11:03:02

标签: android android-workmanager workmanagers

我已经安排了一个预定的工作经理。我的想法是每2小时完成一个过程。但是我需要保证执行力。根据工作经理的文档,每个入队的过程都将得到保证。

但是现在 setRequiresDeviceIdle 让我感到困惑。文档中指出,默认情况下 setRequiresDeviceIdle 已设置为 false 。因此,我认为如果设备处于空闲模式,我的过程将无法正常工作。

空闲模式 = 手机关闭一段时间后

但是,如果我将此 setRequiresDeviceIdle 设置为 true 。我认为现在只有在设备处于空闲模式时,它才能工作。

我希望过程完成,即使设备处于空闲状态还是非空闲状态。我现在该怎么办?

1 个答案:

答案 0 :(得分:1)

如果您通过WorkManager Docs,则会发现:

  

requiresDeviceIdle 布尔值 true 是否设备必须空闲才能运行工作

如果您通过true,则意味着仅当设备位于idle state中时,才会仅执行您的工作。

正如您提到的那样,您希望您的任务始终执行。因此,您应该在false中传递setRequiresDeviceIdle()

注意:您的任务不一定要在2小时后准确执行。根据{{​​3}},您的任务可能会推迟到下一个maintenance window。您的任务肯定会执行,但是持续时间不会完全是2小时。可能还不止于此。

  

在打ze模式下,系统尝试通过限制应用程序访问网络和CPU密集型服务的方式来节省电池。它还可以防止应用访问网络并推迟其工作,同步和标准警报。

     

系统会定期退出Doze短暂时间,以使应用程序完成其延迟的活动。在此维护窗口期间,系统将运行所有待处理的同步,作业和警报,并允许应用访问网络。

如果您不想总是在正确的时间执行任务,则可以使用DOCSsetExactAndAllowWhileIdle()但是不鼓励这种做法,因为这样做不利于电池性能。