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 6.0 处于打盹模式时如何让闹钟管理器工作?
Android 警报管理器 setExactAndAllowWhileIdle() 在打盹模式下的 Android 7.0 Nougat 中不起作用