Android M Doze状态本身有多个状态吗?
我稍微修改了这个应用程序: 它使用SetExactAndAllowHileId设置报警,并计划每1分钟发出一次报警并记录 根据Doze文档,如果此应用程序在手机处于Doze模式时运行,则每15分钟只应发出一次警报。我没有看到那种行为 在运行安卓M的Nexus5上。启动应用程序和整个警报调度过程后,我使用提供的abd命令将手机置于瞌睡状态 adb外壳转储系统电池拔出 adb外壳转储sys deviceidle步骤 adb外壳转储系统设备-h …从日志中,我看到大约30分钟的警报每分钟响一次,最后它们相隔15分钟,持续约一小时。然后回到每分钟一次,然后回到15分钟间隔。在测试过程中,手机完全没有受到干扰 有人知道这是为什么吗?我的印象是,在adb发出这些命令后,手机会立即进入打瞌睡模式,并且闹钟会在启动前15分钟发出Android M Doze状态本身有多个状态吗?,android,adb,alarmmanager,alarm,android-6.0-marshmallow,Android,Adb,Alarmmanager,Alarm,Android 6.0 Marshmallow,我稍微修改了这个应用程序: 它使用SetExactAndAllowHileId设置报警,并计划每1分钟发出一次报警并记录 根据Doze文档,如果此应用程序在手机处于Doze模式时运行,则每15分钟只应发出一次警报。我没有看到那种行为 在运行安卓M的Nexus5上。启动应用程序和整个警报调度过程后,我使用提供的abd命令将手机置于瞌睡状态 adb外壳转储系统电池拔出 adb外壳转储sys deviceidle步骤 adb外壳转储系统设备-h …从日志中,我看到大约30分钟的警报每分钟响一次,最后它
感谢您的帮助。首先,相关的adb命令文档不完整,如您在链接中所述 以下命令仅打印使用信息:
adb shell dumpsys deviceidle -h
以下命令将显示当前状态,包括进入怠速的先决条件(已启用、未移动、未充电、屏幕关闭):
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
以下命令逐步进入空闲模式,但说明您需要多次进入非活动、空闲、挂起、感测,然后进入空闲模式:
adb shell dumpsys deviceidle step
以下命令将强制其进入空闲状态:
adb shell dumpsys deviceidle force-idle
顺便说一句,上的开发者文档最近有所改进。当设备处于空闲模式时,
设置ExactAndAllowHileId
的速率限制是不同的。我猜您的手机通过Doze进入空闲模式需要30分钟,此时您只能每15分钟呼叫一次setExactAndAllowHileidle
在打瞌睡模式下,您的手机将在长达10分钟的空闲维护期内定期唤醒。在这10分钟内,它将从空闲模式唤醒,您的费率限制将调整为每分钟一次。在维护窗口结束后,您将看到它返回到每15分钟一次
文档中描述了空闲的维护窗口:FWIW,我对这些命令不感兴趣,因为我不信任它们。我只是让设备在自身(断电)的情况下进入睡眠模式。不过,我不太确定您的每15分钟视频是从哪里来的,因为我在公共软件中找不到对“15”的引用。@commonware谢谢您重播。我没有把那部分解释清楚,我错了。在SetExactAndAllowHileidle方法的quick docs中指出:“根据我的经验,在正常系统操作下,不会超过大约每分钟发送一次这些警报(在这一点上,每个等待的警报都会被发送);在低功率空闲模式下,这一持续时间可能会明显更长,例如15分钟。”,在实际的打盹模式下,事件之间的间隔要长得多,从一个小时到几个小时不等。工作日志(下载文件)似乎相隔15分钟。然而,我现在看到,在下载中也有例外。直到间隔1分钟的日志再次启动。我相信这是一种空闲维护模式——下载在这里也能正常工作。不幸的是,空闲维护模式之间的间隔为2-4小时。有关DeviceIdleController、其状态及其命令的更多信息,请参阅。