7

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

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

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

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

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

4

1 回答 1

2

如果您浏览WorkManager Docs,您会发现:

requiresDeviceIdle boolean :如果设备必须空闲才能运行工作,则为true

如果你通过true了,就意味着你的工作只有在设备进入时才会被执行idle state

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

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

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

系统会定期退出 Doze 短暂的时间,以让应用程序完成其延迟活动。在此维护时段内,系统会运行所有挂起的同步、作业和警报,并允许应用程序访问网络。

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

于 2019-02-20T10:35:04.053 回答