Android蓝牙和WakeLock关系

我正在开发一个在后台运行的Android应用程序,并支持蓝牙配件。 我想在后台不断收听蓝牙设备尝试打开手机sockets。 我的问题是,是否有可能在不经常保留部分唤醒锁的情况下实现这一点,因为这显然会产生严重的电池后果。 所以我想知道的是蓝牙对手机入睡的影响。 打开蓝牙sockets时手机是否保持清醒状态? 如果设备尝试连接,蓝牙芯片是否会自动唤醒Android? 我试图做一些测试来回答这些问题,但很难分清唤醒锁的发生情况; 此外,我不知道我是否可以依赖于我观察到的行为或者是否可以在其他设备上进行更改。

Solutions Collecting From Web of "Android蓝牙和WakeLock关系"

是的,如果您的应用程序正在运行且线程在serverSocket.accept()方法中,则传入连接唤醒手机,因此不需要使用唤醒锁。 但是,请确保您的服务位于前台,并且不会被系统杀死。

如果您正在为基于或高于棉花糖的设备开发它,则有DOZE模式来处理这些情况。 然后你不必担心这些事情。 它可以用适当的机制处理WAKE_LOCK。

如果有一个打开的蓝牙sockets,手机不会保持清醒,如果设备试图连接,蓝牙芯片也不会唤醒Android。 通常有一个后台线程运行来接受开放端口上的连接,并且一旦设备尝试连接,就是这个线程读取连接,从传入设备获得某种身份validation(我假设有一个安全协议就位以接受任何新的传入连接)并且一旦传入连接被认证,就创建/通知独立线程以处理与该线程的后续信息交换。

因此,后台进程会消耗一些电量和电池消耗,并且还负责保持Android部分唤醒(部分作为后台进程,您可以随时控制检查传入连接的频率)。 通常此后台进程不会始终运行,只有在Android中打开蓝牙时才会运行。 所以你也可以创建一个线程,该线程只应在Android中打开蓝牙时运行,否则它应该睡眠。