我关闭了运行Android M的Nexus 5设备的屏幕显示,然后发出以下命令。
im17-x0:~ r.j$ adb shell dumpsys battery unplug
im17-x0:~ r.j$ adb shell dumpsys deviceidle step
Stepped to: IDLE_PENDING
im17-x0:~ r.a$ adb shell dumpsys deviceidle step
Stepped to: SENSING
im17-x0:~ r.a$ adb shell dumpsys deviceidle step
Stepped to: IDLE
理想情况下,我的设备应该进入空闲模式。但我在将它置于空闲模式并且仍在运行之前启动了CountDownTimer
。
此外,我的手机中仍然存在网络访问(使用this功能检查)
为什么设备没有进入打盹模式?对于待机模式,here的选项也具有相同的效果。为什么呢?
同样在该计时器中,如果我检查isDeviceIdleMode()
,则返回true。
答案 0 :(得分:1)
我在这里有一些提示:
网络访问
我建议通过实际尝试网络呼叫并将其注销来测试网络访问。在空闲模式下,以编程方式检查网络访问存在文档错误:
https://code.google.com/p/android-developer-preview/issues/detail?id=3164
检查空闲/打盹模式
没有太多的文档,但是有些方法没有被Doze模式静音。使用CountDownTimer
可能就是其中之一。我尝试使用setExact()设置闹钟,当应用程序处于空闲模式时,已记录该闹钟无效。如果您可以在该警报触发时记录某些内容,那么您肯定不会处于空闲状态。
让我知道这对你有用!
答案 1 :(得分:1)
截至目前,行为看起来像这样
答案 2 :(得分:0)
我认为网络在打瞌睡时仍会恢复连接(如果你有网络连接),但是如果你尝试做除GCM以外的任何事情,它会给你一个错误。
答案 3 :(得分:0)
REWRITE:我的原始回答假设您的设备实际上并未处于打盹模式,因此improved instructions for getting into Doze mode和Diving Into Android 'M' Doze关于IDLE_MAINTENANCE
状态的链接指向允许网络活动运行。
我的新假设是(1)当deviceidle step
回复Stepped to: IDLE
时,设备 处于打盹模式,(2)打盹模式的行为不符合我们的预期。
Google更新了网页Optimizing for Doze and App Standby,但它与您的调查结果不符。他们在Understanding what Doze mode means for your app和A flowchart for background work, alarms, and your Android app提供了其他信息。另请参阅Issue 2225。
我担心这仍然不能解释你的结果。打盹模式很复杂,记录不足。
Q值。您的应用是否已列入白名单? 优化Doze和App Standby 页面说:
白名单中的应用可以在Doze和App Standby期间使用网络并保留部分唤醒锁定。
BTW,命令
adb shell dumpsys deviceidle
显示当前状态(例如IDLE
)和其他信息,包括作为打盹先决条件的充电,动作和屏幕开/关状态,以及白名单。这对调试很有用。
答案 4 :(得分:0)
以下是有关空闲模式的一些有用信息:
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
我还需要一个快速选项来在Active和Idle状态之间切换,所以我为这些目的写了一个批处理脚本 adbIdleModeSwitch.bat ,你可以下载并使用它: https://drive.google.com/file/d/0B81qFnPX_eUUYTMxOTd1UG94NVk/view