如何在 Android 上测试打盹模式?

Posted

技术标签:

【中文标题】如何在 Android 上测试打盹模式?【英文标题】:How to test Doze Mode on Android? 【发布时间】:2017-08-20 06:07:39 【问题描述】:

有一个旧的 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 与文档中所有服务、jobsheduler、警报管理器和其他后台组件应关闭的模式相同。但这并没有发生。从日志来看,应用程序按预期工作,而 DozeMode 要么我做错了。

告诉我,如果在后台(即关闭应用程序时)有任何操作方式,也许有任何最佳实践来测试 DozeMode 和(后期)用服务重写到更现代的方式。

Android 6,BlackView BV6000S,允许非最佳电池寿命(白名单)的列表中缺少应用程序

更新:Nikita:app NG$ adb shell dumpsys deviceidle force-idle 现在强制进入空闲模式 应用目前工作

【问题讨论】:

你在哪里看到过那个shell命令?在 API "Optimizing for Doze Mode" 中有命令 $ adb shell dumpsys deviceidle force-idle 来激活空闲状态... developer.android.com/training/monitoring-device-state/… 【参考方案1】:

以下是有关空闲模式的一些有用信息:

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

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

【讨论】:

谢谢回答!我已经找到了解决方案,但没有时间发布它。不过,谢谢你的回答! 我在打盹模式有问题...我想测试一下,因为我需要等待大约15分钟才能自然进入这种状态...现在只要屏幕一灭,它就会立即进入打盹,我不想再这样了。我怎样才能恢复它?请看:***.com/q/66593485/2597775 文件不可用。

以上是关于如何在 Android 上测试打盹模式?的主要内容,如果未能解决你的问题,请参考以下文章

如何在打盹模式下移动设备(Android Preview M / Marshmallow)?

Android 7.0 (Nougat) 打盹模式停止 Web 服务

如何以编程方式关闭棉花糖设备中特定应用程序的打盹模式

与设备一起移动时,Android 不会退出打盹模式

打盹模式如何影响后台/前台服务,有/没有部分/全部唤醒锁?

Android 打盹模式 - 蓝牙