Android M Doze 状态本身是否有多个状态?
Does the Android M Doze state have multiple states itself?
我稍微修改了这个应用程序:https://github.com/commonsguy/cw-omnibus/tree/master/JobScheduler
它使用 setExactAndAllowWhileIdle 设置闹钟并安排闹钟每 1 分钟响起并记录。
根据打瞌睡文档,如果此应用程序 运行 而 phone 处于打瞌睡模式,则每 15 分钟只能响起一个闹钟。我没有看到这种行为。
在 a nexus 5 运行 Android M 上。启动应用程序和整个闹钟调度过程后,我使用提供的 abd 命令将 phone 设置为打瞌睡...
adb shell dumpsys 电池拔掉
adb shell dumpsys deviceidle 步骤
adb shell dumpsys deviceidle -h
...从日志中,我看到大约 30 分钟的警报每分钟响一次,最后它们相隔 15 分钟,持续了大约一个小时。然后恢复到每分钟一次,然后恢复到间隔 15 分钟。 phone 在测试期间完全不受干扰。
有人知道这是为什么吗?我的印象是 phone 在执行这些 adb 命令后会立即进入打瞌睡模式,并且警报会在开始后 15 分钟后响起。
感谢您的帮助。
一方面,相关的 adb 命令文档不完整,正如您在 link 至 ISSUE 2930 中指出的那样。
以下命令仅打印使用信息:
adb shell dumpsys deviceidle -h
以下命令将显示当前状态,包括进入 IDLE 的先决条件(启用、不移动、不充电、屏幕关闭):
adb shell dumpsys deviceidle
Settings:
...
Whitelist (except idle) system apps:
...
Whitelist (except idle) all app ids:
...
mEnabled=true
mForceIdle=false
mSigMotionSensor=null
mCurDisplay=...
mScreenOn=false
mCharging=false
mSigMotionActive=false
mState=INACTIVE
这表明您是否需要进行更多设置。例如。似乎需要在模拟器的电源按钮上轻按 2 或 3 次才能获得 mScreenOn=false
.
以下命令进入 IDLE 模式,但 ISSUE 2930 说明您需要多次进入 INACTIVE、IDLE_PENDING、SENSING,然后进入 IDLE:
adb shell dumpsys deviceidle step
以下命令将强制其进入空闲状态:
adb shell dumpsys deviceidle force-idle
顺便说一下,Doze and App Standby 上的开发者文档最近得到了改进。
当设备处于空闲模式时,setExactAndAllowWhileIdle
的速率限制不同。我猜你的 phone 需要 30 分钟才能通过打瞌睡进入空闲模式,此时你只能每 15 分钟调用一次 setExactAndAllowWhileIdle
。
在打瞌睡模式下,您的 phone 将定期唤醒长达 10 分钟的空闲维护期。在这 10 分钟内,它将从空闲模式唤醒,您的速率限制将调整为每分钟一次。维护 window 结束后,您会看到它恢复到每 15 分钟一次。
文档中描述了空闲维护 windows:http://developer.android.com/training/monitoring-device-state/doze-standby.html#understand_doze
我稍微修改了这个应用程序:https://github.com/commonsguy/cw-omnibus/tree/master/JobScheduler
它使用 setExactAndAllowWhileIdle 设置闹钟并安排闹钟每 1 分钟响起并记录。
根据打瞌睡文档,如果此应用程序 运行 而 phone 处于打瞌睡模式,则每 15 分钟只能响起一个闹钟。我没有看到这种行为。
在 a nexus 5 运行 Android M 上。启动应用程序和整个闹钟调度过程后,我使用提供的 abd 命令将 phone 设置为打瞌睡...
adb shell dumpsys 电池拔掉 adb shell dumpsys deviceidle 步骤 adb shell dumpsys deviceidle -h
...从日志中,我看到大约 30 分钟的警报每分钟响一次,最后它们相隔 15 分钟,持续了大约一个小时。然后恢复到每分钟一次,然后恢复到间隔 15 分钟。 phone 在测试期间完全不受干扰。
有人知道这是为什么吗?我的印象是 phone 在执行这些 adb 命令后会立即进入打瞌睡模式,并且警报会在开始后 15 分钟后响起。
感谢您的帮助。
一方面,相关的 adb 命令文档不完整,正如您在 link 至 ISSUE 2930 中指出的那样。
以下命令仅打印使用信息:
adb shell dumpsys deviceidle -h
以下命令将显示当前状态,包括进入 IDLE 的先决条件(启用、不移动、不充电、屏幕关闭):
adb shell dumpsys deviceidle
Settings:
...
Whitelist (except idle) system apps:
...
Whitelist (except idle) all app ids:
...
mEnabled=true
mForceIdle=false
mSigMotionSensor=null
mCurDisplay=...
mScreenOn=false
mCharging=false
mSigMotionActive=false
mState=INACTIVE
这表明您是否需要进行更多设置。例如。似乎需要在模拟器的电源按钮上轻按 2 或 3 次才能获得 mScreenOn=false
.
以下命令进入 IDLE 模式,但 ISSUE 2930 说明您需要多次进入 INACTIVE、IDLE_PENDING、SENSING,然后进入 IDLE:
adb shell dumpsys deviceidle step
以下命令将强制其进入空闲状态:
adb shell dumpsys deviceidle force-idle
顺便说一下,Doze and App Standby 上的开发者文档最近得到了改进。
当设备处于空闲模式时,setExactAndAllowWhileIdle
的速率限制不同。我猜你的 phone 需要 30 分钟才能通过打瞌睡进入空闲模式,此时你只能每 15 分钟调用一次 setExactAndAllowWhileIdle
。
在打瞌睡模式下,您的 phone 将定期唤醒长达 10 分钟的空闲维护期。在这 10 分钟内,它将从空闲模式唤醒,您的速率限制将调整为每分钟一次。维护 window 结束后,您会看到它恢复到每 15 分钟一次。
文档中描述了空闲维护 windows:http://developer.android.com/training/monitoring-device-state/doze-standby.html#understand_doze