Android Job Scheduler在设备进入深度睡眠模式时的行为

3

我目前正在处理一个使用Android作业调度程序的Android应用程序,以在一定时间间隔(比如每4小时)调用API。 假设我的设备没有充电并且没有任何活动正在进行,因此在最后一次API调用后经过一段时间后(比如1小时后),它就会进入睡眠状态。 现在,由于我故意进行了某些活动,我的设备在5个小时后唤醒。调度程序是否会立即调用API(因为距离上次调用已经超过4小时了)?还是会等待下一个3个小时才运行作业呢? (*在这种情况下,我没有获取唤醒锁,所以设备将进入睡眠状态。)

1个回答

4
我认为你所说的深度睡眠是指Doze模式。当设备处于Doze模式时,您的JobServices将不会触发。定期作业不能精确执行。工作要么是精确的,要么是周期性的。因此,在执行间隔之间的维护窗口中,周期性作业将被触发。如果您在Lollipop+上以高频率运行作业,则可能会跳过某些时间段,因为设备正在节省电池电量。

enter image description here

查看Doze模式的限制:

  • 网络访问被暂停。
  • 系统忽略唤醒锁。
  • 标准AlarmManager警报(包括setExact()和setWindow())被推迟到下一个维护窗口。
  • 如果需要设置在Doze中触发的警报,请使用setAndAllowWhileIdle()或setExactAndAllowWhileIdle()。
  • 使用setAlarmClock()设置的警报会正常触发 - 系统在这些警报触发前不久退出Doze。
  • 系统不执行Wi-Fi扫描。
  • 系统不允许同步适配器运行。
  • 系统不允许JobScheduler运行。

但是您可以使用一些技巧来使您的工作在特定时间/安排后立即执行。


1
安东,你能否提供一些好的技巧,让我们在调度后立即执行任务?我们已经尝试使用AlarmManager、JobScheduler、WorkManager... 但似乎都不能在Deep Sleep期间唤醒并执行我们微小的任务。 - Ender2050
1
Anton,请问你能否提供一些技巧,帮助在Doze模式下运行后台任务? - vinod

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接