Wakelock和打盹模式

gre*_*f82 14 android android-6.0-marshmallow

根据Android Marshmallow文档,当系统处于打盹模式时,任何唤醒锁被忽略.然而,我不清楚唤醒锁是否会阻止打盹模式.

Com*_*are 14

根据一些测试,使用Nexus 5安装Android 6.0的最终(?)预览:

  • 持有a PARTIAL_WAKE_LOCK不足以阻止打盹模式 - 即使你有WakeLock并且正在尝试定期工作(例如,setExactAndAllowWhileIdle()每分钟控制一次),设备仍会打瞌睡

  • 保持上使用屏幕android:keepScreenOn(或Java等效)中,用在屏幕上,足以阻断打盹模式

  • android:keepScreenOn在屏幕关闭(用户按下POWER按钮)的情况下保持屏幕正常使用(或等效的Java),不足以阻止打盹模式

即使播放器可能没有移动或充电,IOW,视频播放器等也不会在用户观看视频时受到影响.但是,如果用户按下POWER按钮,则会重新出现Doze风险.

我没有尝试使用FULL_WAKE_LOCK(我希望行为相同android:keepScreenOn,但我很不确定).

  • @ greywolf82:欢迎来到"背景处理战争". (12认同)
  • 哇,所以在关闭屏幕的情况下在后台运行的应用程序不再工作了 :( 感谢您的回复。 (2认同)

sec*_*_aw 10

有趣

Android 6.0中谷歌自己的时钟应用程序可以完全阻止Doze模式:

  1. 在时钟应用程序中设置闹钟,时间<60分钟
  2. 关闭设备
  3. 在控制台中设置$ adb shell dumpsys battery unplug
  4. 在控制台中设置$ adb shell dumpsys deviceidle步骤

国家仍然是"步入:主动"

如果您设置的警报时间> 60分钟,它会正常工作(设备可能会进入空闲状态).但是一旦警报<60分钟,似乎设备从Doze空闲状态中悄然唤醒,因为状态再次返回'ACTIVE'(而不是'IDLE_MAINTENANCE').

我真的很想知道他们是怎么做到的!

- 编辑 -

似乎setAlarmClock()默认情况下会出现此行为.这可能对某些用例有用.

  • 是的:"系统会在警报触发前不久退出打盹",如果*很快*意味着60分钟:-).Doze模式的文档非常糟糕,实际上没有记录很多行为,例如前台服务进入Doze(http://stackoverflow.com/a/33077301/4301846),像Doze这样的GPS等硬件功能( http://stackoverflow.com/a/32521940/4301846),谁知道还有什么.对于相当复杂的行为,这会影响许多用例,这是非常不可思议的. (3认同)

sec*_*_aw 5

对于以上评论讨论,这不是对该问题的答案。通常,这是为了阐明应用程序在打Do模式下的行为。在我的测试应用中,我尝试每2分钟获取一次GPS位置,GPS信号强度一直都足够。

测试条件:

  • Nexus 9,Android M预览版,内部版本MPA44I
  • “忽略优化”
  • setExactAndAllowWhileIdle(),间隔2分钟
  • 每个操作都有1分钟的超时时间来获取GPS定位信息,并被部分唤醒锁包围
  • 日志已写入SQLiteOpenHelper.getWritableDatabase()

打Do模式的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)
Run Code Online (Sandbox Code Playgroud)

现在,我再次查看日志,我注意到一个非常奇怪的行为:“忽略优化”为OFF的同一测试显示出基本相同的结果(如应有的结果),但大多数情况下超时未按预期进行,我得到了闲置时,“活动毫秒数”的范围为〜330000(约为超时时间的5倍)或什至约为580000(约为超时时间的10倍)。我无法解释这种奇怪的行为,但似乎表明在“打ze”模式下设置“忽略优化”实际上确实有一些效果。

编辑:上面描述的“奇怪”行为现已记录:仅在“忽略优化”处于打开状态时,您才能在打ze空闲模式下保持部分唤醒锁。