如何在Android上测试Doze模式?

11

有一个旧的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 现在被强制进入空闲模式 应用程序当前正常工作。

1
你在哪里看到那个Shell命令的?在API“优化Doze模式”中有一个命令$ adb shell dumpsys deviceidle force-idle来激活空闲状态... - Opiatefuchs
1
https://developer.android.com/training/monitoring-device-state/doze-standby.html - Opiatefuchs
1个回答

22

这里是有关空闲模式的一些有用信息:

deviceidle - 是一个新的Android服务,它将始终运行并侦听多个系统事件,这些事件可以触发它进入/退出空闲模式(也称为Doze模式):

deviceidle是一个新的Android服务,会一直运行并监听多个系统事件,这些事件可能会使其进出空闲模式(也被称为Doze模式):

1.Screen on/off
2.Charging status
3.Significant motion detect

DeviceIdleController - 当设备处于唤醒和使用状态时,控制器处于ACTIVE状态。如发生不活动超时、用户关闭屏幕、检测到运动等外部事件会将状态机转换为INACTIVE状态。该状态机包含七个状态:

1.ACTIVE - Device is in use, or connected to a charge source.
2.INACTIVE - Device has recently come out of the active state, meaning that user turned off the display or unplugged it.
3.IDLE_PENDING - Hold on, we are about to enter idle mode.
4.SENSING
5.LOCATING
6.IDLE - Device is idle.
7.IDLE_MAINTENANCE - Window is open for applications to do processing. Then will back to IDLE.

空闲状态 - 为了将设备置于空闲状态,您可以使用以下adb命令:

>adb shell dumpsys battery unplug
>adb shell dumpsys deviceidle force-idle

激活状态 - 为了将设备恢复到激活状态,您可以模拟以下按键事件:

> adb shell input keyevent KEYCODE_WAKEUP

我还需要一个快速切换活动和空闲状态的选项,所以我编写了一个批处理脚本adbIdleModeSwitch.bat,你可以下载并使用它: https://drive.google.com/file/d/0B81qFnPX_eUUYTMxOTd1UG94NVk/view


谢谢你的回答!我已经找到了解决方案,但还没有时间发布。不过,还是非常感谢你的回答! - abbath0767
我在Doze模式中遇到了问题... 我想测试它,因为我需要等待约15分钟才能自然进入此状态... 现在每当屏幕关闭时,它立即进入Doze模式,我不再希望如此。 如何恢复原状? 请参见:https://stackoverflow.com/q/66593485/2597775 - sebasira
文件不可用。 - AlexS

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