WorkManager setRequiresDeviceIdle 令人困惑

Mud*_*qar 7 android workmanagers android-workmanager

我已经实施了一个预定的工作经理。我的想法是每2小时完成一个过程。但我需要保证执行。根据工作管理器的文档,每个排队的进程都将被保证执行。

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

空闲模式=当手机屏幕关闭一段时间

但是如果我将此setRequiresDeviceIdle设置为true。我假设现在它只会在设备处于空闲模式时工作

即使设备处于空闲状态或未处于空闲状态,我也希望进程完成。我现在该怎么办?

ank*_*ag2 4

如果您浏览WorkManager 文档,您会发现:

requireDeviceIdle boolean:如果设备必须处于空闲状态才能运行工作,则为 true

如果通过true,则意味着只有在设备处于状态时才会执行您的工作idle state

正如您提到的,您希望始终执行您的任务。因此,您应该false传入setRequiresDeviceIdle().

注意:您的任务不必恰好在 2 小时后执行。根据DOCS,您的任务可能会推迟到下一个maintenance window。你的任务肯定会被执行,但持续时间不会正好是2小时。可能还不止于此。

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

系统会定期退出 Doze 状态一段时间,以便应用程序完成其推迟的活动。在此维护时段期间,系统运行所有待处理的同步、作业和警报,并允许应用程序访问网络。

如果您不希望任务始终在准确的时间执行,您可以使用警报管理器setExactAndAllowWhileIdle(). 但不鼓励这种做法,因为它不利于电池性能。

  • 这也让我很困惑。对我来说,“setRequiresDeviceIdle(true)”会产生利益冲突:这意味着您希望作业仅在设备决定进入空闲状态时运行...当它确实进入空闲状态时* *不想**想要从事任何工作吗? (3认同)
  • 设备到底什么时候空闲?定义是什么? (3认同)