Android 打盹模式 - 蓝牙

Posted

技术标签:

【中文标题】Android 打盹模式 - 蓝牙【英文标题】:Android Doze Mode - Bluetooth 【发布时间】:2016-06-27 15:28:54 【问题描述】:

我的问题很简单。我想知道我的应用程序的最佳做法是什么,以便它可以“防打瞌睡”。这变得更加相关,因为 android N 将在更多情况下应用 Doze。

在阅读Doze Documentation时,有一部分提到了网络访问

在打盹模式下,系统会尝试通过限制 应用程序对网络和 CPU 密集型服务的访问。它还可以防止 应用程序访问网络并推迟其作业、同步和 标准警报。

我认为 蓝牙 属于 网络访问,对吗?

由于我没有启用 Marshmallow(或 Android N)的设备,并且由于模拟器不允许蓝牙交互,因此我无法真正测试我的应用在打盹模式下的行为。

打盹模式会终止任何正在进行的蓝牙连接吗?同样适用于蓝牙经典和 LE 吗?带蓝牙 A2DP 的耳机怎么样?

我的应用必须保持这种连接,否则核心功能将被破坏。

当然,在这种情况下,只要用户愿意,您的设备就需要连接到蓝牙远程设备。

我知道存在一个打盹白名单,但在某些情况下,它似乎不会让应用像在低于 API 23 的设备上那样运行。

感谢您的帮助!

【问题讨论】:

我没试过,但我认为蓝牙不受影响 @greywolf82 感谢您的意见,这看起来很有希望!如果你有时间和手段,你可以试试吗?我真的很感激。谢谢! 白名单允许您的应用访问网络,并持有部分唤醒锁。所有其他打瞌睡限制仍然适用 【参考方案1】:

看起来打瞌睡对蓝牙本身没有任何限制,但要做任何有意义的事情,您需要保持 cpu 开启,并且在更深的打瞌睡中忽略唤醒锁。

如果它是您应用的核心功能,您可以尝试让用户whitelist您的应用。这可以授予partial wake locks 并保持cpu 开启。

Foreground services 也不受任何打瞌睡限制,因此这是另一种透明的方式。

【讨论】:

据我了解,前台服务只是免杀后台运行的应用,与深度睡眠打盹模式无关。

以上是关于Android 打盹模式 - 蓝牙的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Android 上测试打盹模式?

Android 6.0 处于打盹模式时如何让闹钟管理器工作?

与设备一起移动时,Android 不会退出打盹模式

Android 警报管理器 setExactAndAllowWhileIdle() 在打盹模式下的 Android 7.0 Nougat 中不起作用

如何在打盹模式下移动设备(Android Preview M / Marshmallow)?

Android O 在打盹模式下前台服务未接收位置更新