Android M Doze状态本身有多个状态吗?

我稍微修改了这个应用程序:
https://github.com/commonsguy/cw-omnibus/tree/master/JobScheduler

它使用setExactAndAllowWhileIdle设置警报,并安排警报每1分钟关闭并记录它.

根据Doze文档,如果此应用程序在手机处于打盹模式时正在运行,则每15分钟只应关闭一个警报.我没有看到这种行为.

在运行Android M的nexus 5上启动应用程序和整个警报调度过程后,我使用提供的abd命令将手机放入Doze …

adb shell dumpsys电池拔掉
adb shell dumpsys deviceidle步骤
adb shell dumpsys deviceidle -h

…从日志中,我看到每分钟有大约30分钟的警报响起,最后它们相隔15分钟大约一个小时.然后回到每分钟一次,然后再回到15分钟.在测试期间,手机完全没有受到干扰.

有人知道为什么吗?我的印象是,在这些adb命令之后手机将立即处于打盹模式,并且警报将在距离开始15分钟后消失.

谢谢你的帮助.

最佳答案 首先,相关的adb命令文档是不完整的,正如您在
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

BTW最近在Doze and App Standby开发人员文档得到了改进.

点赞