根据Android Marshmallow文档,当系统处于打盹模式时,任何唤醒锁都会被忽略。但是,我不清楚wakelock是否阻止打盹模式。Wakelock和打盹模式
回答
基于一些测试,使用的是Nexus 5安装的Android 6.0的最终的预览(?):
拿着
PARTIAL_WAKE_LOCK
不足以阻止打盹模式—器件仍将打瞌睡,甚至虽然你有WakeLock
和正在尝试做的日常工作(例如,setExactAndAllowWhileIdle()
得到控制每分钟)保持在屏幕上使用
android:keepScreenOn
(或相当于Java),与在屏幕上,是足以阻挡打盹模式保持使用
android:keepScreenOn
屏幕(或Java当量),与屏幕关闭(用户按下电源按钮),不足以阻止打盹模式
IOW,视频播放器等应该不会在用户观看视频时受到影响,即使播放器可能没有移动或充电。但是,如果用户按下电源按钮,则会重新产生打盹风险。
我还没有尝试过使用FULL_WAKE_LOCK
(我预计行为与android:keepScreenOn
相同,但我很不确定)。
哇,这样在背景屏幕关闭运行的应用程序已经不:(感谢您的答复@ greywolf82工作 – greywolf82
。 AndAllowWhileIdle()如果激活锁定被忽略,我怎么能在这种情况下处理数据在处理CPU可以睡:(我失去了什么 – CommonsWare
在这一点上我无法理解的方法: – greywolf82
回应上面的评论讨论,这不是对问题的回答。 这是为了澄清一般在打盹模式下的应用程序行为。 在我的测试应用程序中,我试图每2分钟获得一个GPS位置,GPS信号强度在任何时候都足够。
试验条件:
- 的Nexus 9,机器人M预览版,构建MPA44I
- “忽略优化” 用2分钟的时间间隔
- ON
- setExactAndAllowWhileIdle()的每个操作具有1分钟的超时获取GPS定位并被部分唤醒包围
- 将日志写入SQLiteOpenHelper.getWritableDatabase()
GPS测试日志打盹模式:
1 2015-09-04 - 12:14 GPS ok (device left stationary unplugged)
2 2015-09-04 - 12:16 GPS ok
3 2015-09-04 - 12:18 GPS ok
4 2015-09-04 - 12:20 GPS ok
5 2015-09-04 - 12:22 GPS ok
6 2015-09-04 - 12:24 GPS ok
7 2015-09-04 - 12:26 GPS ok
8 2015-09-04 - 12:28 GPS ok
9 2015-09-04 - 12:30 GPS ok
10 2015-09-04 - 12:32 GPS ok
11 2015-09-04 - 12:34 GPS ok
...
31 2015-09-04 - 13:14 GPS ok
32 2015-09-04 - 13:16 GPS ok
33 2015-09-04 - 13:18 GPS ok
34 2015-09-04 - 13:20 GPS ok
35 2015-09-04 - 13:22 GPS ok
36 2015-09-04 - 13:24 GPS ok
37 2015-09-04 - 13:26 GPS ok (entering Doze mode some time after)
38 2015-09-04 - 13:42 GPS failed, active millis: 60174 (idle)
39 2015-09-04 - 13:57 GPS failed, active millis: 60128 (idle)
40 2015-09-04 - 14:12 GPS failed, active millis: 60122 (idle)
41 2015-09-04 - 14:16 GPS ok (idle maintenance)
42 2015-09-04 - 14:18 GPS ok (idle maintenance)
43 2015-09-04 - 14:20 GPS ok (idle maintenance)
44 2015-09-04 - 14:22 GPS ok (idle maintenance)
45 2015-09-04 - 14:38 GPS failed, active millis: 60143 (idle)
46 2015-09-04 - 14:53 GPS failed, active millis: 60122 (idle)
47 2015-09-04 - 15:08 GPS failed, active millis: 60068 (idle)
48 2015-09-04 - 15:23 GPS failed, active millis: 60138 (idle)
49 2015-09-04 - 15:38 GPS failed, active millis: 60140 (idle)
50 2015-09-04 - 15:53 GPS failed, active millis: 60131 (idle)
51 2015-09-04 - 16:08 GPS failed, active millis: 60185 (idle)
52 2015-09-04 - 16:12 GPS ok (ending Doze mode - power button on)
现在,我在我的日志看了一遍,我发现一个很奇怪的现象: 与“忽略优化”同样的测试停止时显示基本相同的结果(如它应该),但大部分时间超时没有按预期的那样工作,在空闲时,我得到了〜330000(〜5倍超时时间)或甚至〜580000(〜10倍超时时间)范围内的“有效毫秒数” 。 这个奇怪的行为我无法解释,但它似乎表明,实际上在打盹模式下设置“忽略优化”会产生一些影响。
编辑:上述“奇怪”的行为是刚才documented:只能用“忽略优化”,您可能持有打盹空闲模式下的部分激活锁定。
有趣
在安卓6.0谷歌自己的时钟应用程序能够阻断完全打盹模式:
- 在设定时间闹铃时钟程序从<60分钟现在
- 关闭设备
- 在控制台设置$ adb shell dumpsys电池拔下
- 在控制台E设置$亚行外壳dumpsys deviceidle一步
状态保持为“走到:ACTIVE”
如果设置的警报从现在时间> 60分钟,它正常工作(设备可以进入空闲状态)。但是一旦报警为< 60分钟,看起来该设备安静地从睡眠瞌睡中醒来,因为状态再次返回'ACTIVE'(而不是'IDLE_MAINTENANCE')。
我真的不知道他们是如何做!
- 编辑 -
这似乎是有默认这种行为setAlarmClock()
。 这可能对某些用例有帮助。
查看关于'setAlarmClock()'与打盹模式相关的文档https://developer.android.com/training/monitoring-device-state/doze-standby.html#restrictions,以及关于如何将应用程序列入白名单的页面部分。仍然可以使用部分唤醒锁。 JavaDocs没有提到这一点。 – Jerry101
嗯,是的:“系统在这些警报发生之前不久就打瞌睡了”,如果*很短*就意味着60分钟:-)。打盹模式的文档非常糟糕,许多行为实际上根本没有记录,例如,前景服务进入打瞌睡(http://stackoverflow.com/a/33077301/4301846),像Doze这样的硬件功能在Doze(http://stackoverflow.com/a/32521940/4301846)中不可用,谁知道还有什么。对于相当复杂的行为,这会影响许多用例,这是非常不可思议的。 –
@sec_aw,setAlarmClock()似乎是明确的方法,使我们的行为良好的警报管理器的应用程序。但是,当大多数支持闹钟的应用程序(包括不良行为的应用程序)开始使用setAlarmClock(),将API升级到21级或更高级别时,Google在Android 6.0中的(疯狂)尝试将完全无用。我非常欢迎setAlarmClock()是一种解决方法,但无法理解Google的意图。 – Tomcat
据我已经探索了,所有的唤醒锁(除非应用程序与当前的前景保持服务的那些)是更深层次的瞌睡时开始下降。整个瞌睡的目的是让系统在'相关条件'启动时进入睡眠状态。所以,是的,锁并不是他们会太在意的事情。
我看到它的jobscheduler是去调度,后台任务等,在未来的道路的方式。虽然对开发人员有一些控制权,但这是我猜框架大家为电池续航所做的。这更像是“触发器,希望事情或多或少会按时发生”。
来到你的使用情况,JobScheduler有onStopJob回调知道什么时候你的任务的执行已停止[出于任何原因 - 说的WiFi被切换]你需要采取适当的措施,如重新安排你的工作到下一个维护窗口。从文档:
一个直接的影响是系统将停止为你启动唤醒锁。
- 1. 的Android打盹模式
- 2. 打盹模式处理
- 3. Android打盹模式 - 蓝牙
- 4. 打盹模式和前台服务
- 5. 打盹模式和应用待机
- 6. 打盹模式暂停前台服务
- 7. 打盹模式三星设备
- 8. 什么是打盹模式时间?
- 9. NotificationListenerService和打盹模式和应用待机
- 10. VoIP应用程序的打盹和待机模式
- 11. Android 6.0中的打盹和应用待机模式
- 12. UILocalNotification操作和打盹
- 13. Android M:如何以编程方式禁用打盹模式
- 14. 定位服务被打盹模式停止
- 15. 打盹模式/应用待机在音频播放
- 16. 避免打盹模式没有白名单的应用程序
- 17. 打盹模式对我的应用程序至关重要
- 18. Android手机中打盹模式的含义是什么?
- 19. Nexus 5不会使用ADB进入打盹模式
- 20. Android 7.0(Nougat)打盹模式停止Web服务
- 21. 使用adb改变打盹模式设置
- 22. Android N打盹模式 - 如何保持后台下载和处理?
- 23. Android打盹报警窗口
- 24. AlarmManager和WakeLock
- 25. Android:MediaPlayer和AsyncTask Wakelock
- 26. Android WakeLock和KeyGuard
- 27. 如何将设备进入打盹维护窗口,并走出打盹
- 28. AlarmManager和WakeLock示例
- 29. 打盹模式睡谷歌的地理栅栏示例应用程序
- 30. 从哪里打盹弹出进入ScheduledNotification?
请检查[这个答案](http://stackoverflow.com/a/35914341/2826147)。 “在后台处理战争”欢迎 –