首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Wakelock和瞌睡模式

Wakelock和瞌睡模式
EN

Stack Overflow用户
提问于 2015-08-29 13:53:56
回答 4查看 15.5K关注 0票数 16

根据Android文档,当系统处于打瞌睡模式时,任何唤醒都会被忽略。然而,我还不清楚唤醒是否能阻止打瞌睡模式。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2015-08-29 21:32:42

基于一些测试,使用Nexus 5与最终(?)安装的Android6.0预览:

  • 持有PARTIAL_WAKE_LOCK不足以阻止doze模式--设备仍然会打瞌睡,即使您有WakeLock并且正在尝试做正常的工作(例如,setExactAndAllowWhileIdle()每分钟都要控制)
  • 保持屏幕使用android:keepScreenOn (或与Java等效的),并打开屏幕,就足以阻止Doze模式。
  • 在屏幕关闭(用户按电源按钮)的情况下,保持屏幕使用android:keepScreenOn (或Java等效)不足以阻止Doze模式。

IOW、视频播放器等在用户观看视频时不应受到影响,即使播放机可能没有移动或充电。但是,如果用户按下电源按钮,您将重新陷入Doze风险。

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

票数 16
EN

Stack Overflow用户

发布于 2015-10-17 14:34:17

有趣的

谷歌自己在Android6.0中的时钟应用程序能够完全屏蔽Doze模式:

  1. 在时钟应用程序中,从现在起设置一个时间< 60分钟的闹钟
  2. 关掉设备
  3. 在控制台集中,$adb外壳虚拟电池拔出插头
  4. 在控制台集中,$adb shell虚拟设备空闲步骤

这个国家仍然是“踏进:积极的”

如果从现在起设置一个时间> 60分钟的警报,它将正常工作(设备可能处于空闲状态)。但是,一旦警报< 60分钟,当状态再次返回'ACTIVE‘(而不是'IDLE_MAINTENANCE')时,设备似乎从Doze空闲中悄悄地醒来。

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

-编辑-

默认情况下,具有这种行为的似乎是setAlarmClock()。这可能对某些用例有帮助。

票数 10
EN

Stack Overflow用户

发布于 2015-09-11 11:04:57

作为对上述意见讨论的回应,这不是问题的答案。这是为了澄清应用在Doze模式下的一般行为。在我的测试应用程序中,我尝试每2分钟获得一个GPS位置,GPS信号强度在任何时候都足够。

测试条件:

  • Nexus 9,Android预览版,构建MPA44I
  • “忽略优化”
  • 间隔2分钟的setExactAndAllowWhileIdle()
  • 每个操作都有一个1分钟的超时时间,用于获取GPS补丁,并被一个部分唤醒锁所包围。
  • 日志被写入SQLiteOpenHelper.getWritableDatabase()

用于Doze模式的GPS测试日志:

代码语言:javascript
复制
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)

现在我再次查看了我的日志,我注意到了一个非常奇怪的行为:“忽略优化”OFF的相同测试显示了基本相同的结果(就像它应该的那样),但是大多数情况下超时并不像预期的那样工作,所以我得到了“活动millis”的范围,或者是330000(5倍超时时间),甚至是580000次(超时时间为10次)。这个奇怪的行为我无法解释,但它似乎表明,实际上有一些影响的设置“忽略优化”的Doze模式。

编辑:上面描述的‘奇怪’行为现在是记录在案:只有在“忽略优化”打开的情况下,您可以在Doze空闲模式下保持部分唤醒。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32286797

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档