我已经安排了一个预定的工作经理。我的想法是每2小时完成一个过程。但是我需要保证执行力。根据工作经理的文档,每个入队的过程都将得到保证。
但是现在 setRequiresDeviceIdle 让我感到困惑。文档中指出,默认情况下 setRequiresDeviceIdle 已设置为 false 。因此,我认为如果设备处于空闲模式,我的过程将无法正常工作。
和空闲模式 = 手机关闭一段时间后。
但是,如果我将此 setRequiresDeviceIdle 设置为 true 。我认为现在只有在设备处于空闲模式时,它才能工作。
我希望过程完成,即使设备处于空闲状态还是非空闲状态。我现在该怎么办?
答案 0 :(得分:1)
如果您通过WorkManager Docs,则会发现:
requiresDeviceIdle 布尔值: true 是否设备必须空闲才能运行工作
如果您通过true
,则意味着仅当设备位于idle state
中时,才会仅执行您的工作。
正如您提到的那样,您希望您的任务始终执行。因此,您应该在false
中传递setRequiresDeviceIdle()
。
注意:您的任务不一定要在2小时后准确执行。根据{{3}},您的任务可能会推迟到下一个maintenance window
。您的任务肯定会执行,但是持续时间不会完全是2小时。可能还不止于此。
在打ze模式下,系统尝试通过限制应用程序访问网络和CPU密集型服务的方式来节省电池。它还可以防止应用访问网络并推迟其工作,同步和标准警报。
系统会定期退出Doze短暂时间,以使应用程序完成其延迟的活动。在此维护窗口期间,系统将运行所有待处理的同步,作业和警报,并允许应用访问网络。
如果您不想总是在正确的时间执行任务,则可以使用DOCS和setExactAndAllowWhileIdle()
。 但是不鼓励这种做法,因为这样做不利于电池性能。