【问题标题】:How to disable Doze for an app?如何禁用应用程序的打盹?
【发布时间】:2016-01-08 03:58:58
【问题描述】:

Android 6 上的新 Doze 模式几乎可以禁用所有有用的后台活动。我有一个应用程序,它会定期唤醒设备(即使没有锁定屏幕),保持部分唤醒锁定,进行一些扫描并将其报告给互联网。它不是间谍应用程序 - 此操作是故意的,并且应用程序的用户知道。

现在使用Android 6 它不再起作用,因为Doze 模式阻止了与我的服务器的最终通信。

我在“电池”下发现了一个新设置,它确实允许我将我的应用程序放在那些不支持“电池优化”的应用程序的列表中。在第一次测试中,这似乎让我的应用再次运行。

经过一些额外的测试,我发现即使我的应用程序也不支持Doze,它在后台不再工作了。

此设置不是应该为特定应用禁用Doze 吗?

在这里打瞌睡的详细信息http://www.androidpolice.com/2015/06/01/android-m-feature-spotlight-this-is-exactly-how-doze-reduces-battery-drain/

【问题讨论】:

  • 确保您已经看到 Google 提供的关于打瞌睡模式的新指南:developer.android.com/training/monitoring-device-state/…
  • 谢谢,还没有看到。几天前刚刚获得了 Android 6 更新
  • "对于一小部分用例,这可能还不够。对于这种情况,系统会提供可配置的应用白名单,这些应用可以部分免于打盹和应用待机优化。白名单可以在 Doze 和 App Standby 期间使用网络并持有部分唤醒锁。”这绝对不是真的。我已将我的应用列入白名单进行测试。但是,网络访问被阻止。
  • 由于 Doze 是系统范围的模式,因此不能有每个应用程序的白名单。当 Doze 处于活动状态时,设备会进入深度睡眠模式,因此出现异常是没有意义的。
  • 嗯...感谢您的评论,但我引用了 Google 官方文档。据此,应用程序可以部分退出打瞌睡和完全禁用。或者你怎么理解?关键是“部分豁免”。您的声明有误。

标签: android optimization battery android-6.0-marshmallow


【解决方案1】:

据我了解Doze Restrictions:

  • 标准AlarmManager 警报 [...] 推迟到下一个维护时段。
  • 系统不执行 Wi-Fi 扫描。

恐怕将您的应用列入白名单不足以使其再次运行。正如您在 cmets 中提到的,exemption is only partial。

【讨论】:

  • 是的,第 1 点得到确认。如果您使用 GCM 高优先级消息来触发此类操作,您可以进行 Wifi 扫描。
【解决方案2】:

我在一个应用程序中遇到了这个确切的问题,该应用程序需要加速度计、陀螺仪和磁力计在后台和屏幕关闭时运行。 Android 6.0 Doze 禁止应用程序在屏幕关闭时实时使用传感器。将应用程序添加到电池优化白名单并不能解决应用程序的问题。制作PARTIAL_WAKE_LOCK 确实解决了传感器的问题。

【讨论】:

  • 对,PARTIAL_WAKE_LOCK 有帮助。但我之前已经有那个唤醒锁了。这些是我到目前为止的经验: 1)如果设备处于打盹模式,您将不会收到任何警报来唤醒设备做事。它将在下一个所谓的“维护”期间唤醒。 2)即使您设法获得 GCM 消息(即使在打盹模式下也能很好地处理高优先级消息),您肯定无法获得新的 wifi 扫描,因为堆栈只会重播上次看到的扫描。我无法评论传感器。白名单根本没有帮助,恕我直言
  • 据我所知,一旦系统决定进入打盹模式,我们可能拥有的任何唤醒锁都会退出。这就是我想延长电池寿命的全部想法。他们只是想透明地做到这一点,所以可能是前台服务或像 setAndAllowWhileIdle 这样的 AlarmManager api
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-10-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多