如何在 Android 上测试打瞌睡模式?
How to test Doze Mode on Android?
有一个旧的 Android 应用程序在后台运行 2 服务(服务)。
需要更新应用程序才能在工作时发送数据和记录日志,这不是新的打瞌睡模式。在您修改当前代码之前,我决定检查现在一切将如何工作。对于 运行 应用程序,在日志中我看到两个服务都是 运行ning (服务读取设备位置的基本含义,第二个服务将数据发送到服务器)。使用命令
关闭屏幕
adb shell dumpsys deviceidle step
将系统转换为打瞌睡模式:
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 只是相同的模式,根据文档,所有服务、jobsheduler 的、警报管理器和其他后台组件都应该关闭。但这并没有发生。从日志来看,应用程序按预期工作,打瞌睡模式是我做错了什么。
告诉我,如果有任何后台操作(即当您关闭应用程序时),也许有任何最佳实践来测试 DozeMode 和(后期)用服务重写为更现代的。
Android6、BlackView BV6000S,非最佳续航允许列表(白名单)中缺少应用
更新:Nikita:app NG$ adb shell dumpsys deviceidle force-idle
现在被迫进入空闲模式
应用目前可用
这里有一些关于空闲模式的有用信息:
deviceidle - 是一个新的 android 服务,它将始终 运行 并监听可以触发它的几个系统事件 in/out 空闲模式(也称为打瞌睡模式):
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
有一个旧的 Android 应用程序在后台运行 2 服务(服务)。
需要更新应用程序才能在工作时发送数据和记录日志,这不是新的打瞌睡模式。在您修改当前代码之前,我决定检查现在一切将如何工作。对于 运行 应用程序,在日志中我看到两个服务都是 运行ning (服务读取设备位置的基本含义,第二个服务将数据发送到服务器)。使用命令
关闭屏幕adb shell dumpsys deviceidle step
将系统转换为打瞌睡模式:
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 只是相同的模式,根据文档,所有服务、jobsheduler 的、警报管理器和其他后台组件都应该关闭。但这并没有发生。从日志来看,应用程序按预期工作,打瞌睡模式是我做错了什么。
告诉我,如果有任何后台操作(即当您关闭应用程序时),也许有任何最佳实践来测试 DozeMode 和(后期)用服务重写为更现代的。
Android6、BlackView BV6000S,非最佳续航允许列表(白名单)中缺少应用
更新:Nikita:app NG$ adb shell dumpsys deviceidle force-idle
现在被迫进入空闲模式
应用目前可用
这里有一些关于空闲模式的有用信息:
deviceidle - 是一个新的 android 服务,它将始终 运行 并监听可以触发它的几个系统事件 in/out 空闲模式(也称为打瞌睡模式):
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