“打瞌睡”的真正作用是啥?应用程序是不是应该因此而更改其代码?
Posted
技术标签:
【中文标题】“打瞌睡”的真正作用是啥?应用程序是不是应该因此而更改其代码?【英文标题】:What does "Doze" really do? And should apps change their code because of it?“打瞌睡”的真正作用是什么?应用程序是否应该因此而更改其代码? 【发布时间】:2016-01-10 07:31:52 【问题描述】:背景
android 6 引入了一种称为“Doze”的内置机制,以便在设备休眠时更好地处理电池。
问题
问题是,我看不出它到底是如何工作的,以及应用程序应该如何改变以处理这种新机制(如果有的话)。
显然,这取决于您在代码中的内容,但我应该寻找什么?
我发现了什么
我发现有 2 个网页在讨论这个问题:
https://plus.google.com/+AndroidDevelopers/posts/94jCkmG4jff http://developer.android.com/training/monitoring-device-state/doze-standby.html但他们大多谈论警报:
为了帮助安排闹钟,Android 6.0(API 级别 23)引入了 两个新的 AlarmManager 方法:setAndAllowWhileIdle() 和 setExactAndAllowWhileIdle()。使用这些方法,您可以设置警报 即使设备处于打瞌睡状态也会触发。
问题
应用开发者应该如何处理这种新机制?调度 API 会因此而有所不同吗?需要进行哪些更改:
警报
后台/前台服务
唤醒锁
JobScheduler 和 GcmTaskService
在这个问题上是否需要进行任何调整来处理 Android 6 及更高版本?
【问题讨论】:
【参考方案1】:最重要的行为变化之一是由于打盹而在空闲模式下缺乏网络连接。但是,行为有很多变化——包括唤醒锁和 JobScheduler 作业。
开发人员文档非常清楚在打瞌睡时哪些内容不起作用: http://developer.android.com/training/monitoring-device-state/doze-standby.html#restrictions
如果您正在寻找细节,请随时查看我写的关于我对打盹和空闲模式行为的一些观察的 Gist: https://gist.github.com/ccpmark/430d4ddf3a46a02672c1
【讨论】:
白名单有没有可能对网络有帮助? 据我所知,白名单仅适用于App Standby模式,不适用于Doze。 code.google.com/p/android-developer-preview/issues/… 我不知道。他们在那里谈论警报,但文档说“列入白名单的应用程序可以使用网络并在打盹和应用程序待机期间保持部分唤醒锁定”。来源:developer.android.com/training/monitoring-device-state/… 对不起 - 我弄错了。看起来白名单可以让你绕过打瞌睡。 但仅限于特定的事情,比如部分唤醒锁,对吧?以上是关于“打瞌睡”的真正作用是啥?应用程序是不是应该因此而更改其代码?的主要内容,如果未能解决你的问题,请参考以下文章