Android 使用不同调度程序时打瞌睡的行为

Behaviour in Android Doze when using different Scheduler

我正在尝试针对 DozeAppStandBy 优化我们的应用程序,并实施了 测试应用程序以了解使用不同后台调度程序时系统的行为。

但是我对使用 AlarmManagerObservable.intervall() 时的行为感到非常困惑。

AlarmManager

我已经通过 Activity 注册了一个警报,然后通过 adb 在 Doze 中引入了设备。 系统按预期运行,警报未触发。

Rx-Observable.intervall

我已经通过 Activity 启动了 Service,然后通过 adb 在 Doze 中引入了设备。 Service 不是 前台服务。 在我看来,系统的行为并不像预期的那样,报价会持续传送到应用程序。

为了验证该设备确实在 Doze,我还查看了 adb bugreport 的电池统计数据,历史学家告诉我该设备在那个时间跨度内处于 Doze

是否有任何文档说明不同的调度程序在 DozeAppStandBy 中如何工作?

感谢任何建议。

问题似乎是 adb 保留了 CPU 运行(如果设备是通过 USB 连接的)即使设备通过 adb 使用命令

$ adb shell dumpsys battery unplug

$ adb shell input keyevent KEYCODE_POWER

adb shell dumpsys deviceidle step

ScheduledThreadPoolExecutor 调度的间隔计时器(由 rxjava 使用)似乎不受 doze 模式限制,但通过 AlarmManager 发出警报。