有一个旧的Android应用程序,可以在后台工作2个服务(Service)。
在更新该应用程序以在工作时发送数据和日志记录时不会出现新的DozeMode之前,您需要修改当前代码之前,我决定检查一下现在的一切都将如何工作。运行应用程序后,在日志中我看到两个服务正在运行(服务的基本含义是读取设备的位置,第二个服务将数据发送到服务器)。通过命令关闭屏幕。
adb shell dumpsys deviceidle step
将系统转换为DozeMode:
Nikita:app NG$ adb shell dumpsys deviceidle step
Stepped to: ACTIVE
Nikita:app NG$ adb shell dumpsys deviceidle step
Stepped to: IDLE_PENDING
Nikita:app NG$ adb shell dumpsys deviceidle step
Stepped to: SENSING
Nikita:app NG$ adb shell dumpsys deviceidle step
Stepped to: LOCATING
Nikita:app NG$ adb shell dumpsys deviceidle step
Stepped to: IDLE
如果我理解正确的话,IDLE只是一种模式,在这种模式下,根据文档,所有的服务、作业调度管理器、警报管理器和其他后台组件都应该被关闭。但事实并非如此。从日志来看,应用程序按照预期工作,DozeMode要么是我做错了什么。告诉我,也许有关于测试DozeMode和(晚些时候)重写服务到更现代化的最佳实践,如果有任何在后台执行操作的方式(例如,当您关闭应用程序时)。
Android 6,BlackView BV6000S,在未被允许的电池寿命(白名单)列表中找不到应用程序。
更新:
Nikita:app NG$ adb shell dumpsys deviceidle force-idle
现在被强制进入空闲模式
应用程序当前正常工作。
$ adb shell dumpsys deviceidle force-idle
来激活空闲状态... - Opiatefuchs