我稍微修改了这个应用程序:https://github.com/commonsguy/cw-omnibus/tree/master/JobScheduler
它使用setExactAndAllowWhileIdle设置警报,并安排每1分钟发出一次警报并记录。
根据Doze文档,如果这个应用程序在手机处于Doze模式时正在运行,那么每15分钟就应该有一个报警。我没看到那种行为。
在一个运行Android M的nexus 5上,在启动应用程序和整个警报调度过程之后,我使用提供的abd命令将手机放入Doze .
亚行空壳虚拟电池拔出亚行空壳虚拟设备步骤亚行虚拟设备空闲-h
...From日志,我看到大约30分钟的警报器每分钟响一次,最后,它们相隔15分钟大约一个小时。然后回到每分钟一次,然后回到每分钟15分钟。在测试期间,电话完全没有受到干扰。
有人知道这是为什么吗?我当时的印象是,在亚行发出指令后,手机将立即处于Doze模式,警报将在15分钟后启动。
谢谢你的帮助。
发布于 2015-10-05 05:43:49
首先,相关的adb命令文档是不完整的,正如您在指向第2930期的链接中指出的那样。
以下命令仅打印使用信息:
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。
以下命令向空闲模式迈出了一步,但第2930期解释说,要进入非活动状态,IDLE_PENDING,感测,然后是空闲,您需要多次执行步骤:
adb shell dumpsys deviceidle step下面的命令将强制它进入空闲状态:
adb shell dumpsys deviceidle force-idle顺便说一下,打瞌睡和应用程序待命上的开发人员文档最近得到了改进。
发布于 2015-10-13 19:32:16
当设备处于空闲模式时,setExactAndAllowWhileIdle的速率限制是不同的。我猜你的手机需要30分钟才能通过Doze进入空闲模式,这时你只能每15分钟打一次电话给setExactAndAllowWhileIdle。
在Doze模式下,你的手机会周期性地唤醒一个长达10分钟的空闲维护期。在这10分钟内,它将从空闲模式醒来,您的速率限制将调整为每分钟一次。在维护窗口结束后,您将看到它每15分钟恢复一次。
在docs:打瞌睡中描述了空闲维护窗口
https://stackoverflow.com/questions/31999618
复制相似问题