Android 当设备处于睡眠状态而未获取唤醒锁时,是否可能调用回调
即使手机处于睡眠状态,我也希望跟踪与的连接-有一个用于跟踪连接/断开连接的回调 因此,在上面的教程中有一个Android 当设备处于睡眠状态而未获取唤醒锁时,是否可能调用回调,android,android-service,bluetooth-lowenergy,android-bluetooth,android-wake-lock,Android,Android Service,Bluetooth Lowenergy,Android Bluetooth,Android Wake Lock,即使手机处于睡眠状态,我也希望跟踪与的连接-有一个用于跟踪连接/断开连接的回调 因此,在上面的教程中有一个服务 public class BluetoothLeService extends Service { private final BluetoothGattCallback mGattCallback = new BluetoothGattCallback() { @Override public void onConnectionStateCh
服务
public class BluetoothLeService extends Service {
private final BluetoothGattCallback mGattCallback = new BluetoothGattCallback() {
@Override
public void onConnectionStateChange(BluetoothGatt gatt, int status, int newState) {
//...
}
//...
}
//...
}
要连接,我打电话
mBluetoothGatt = device.connectGatt(this, false, mGattCallback);
正如你所看到的,我在任何地方都没有获得尾流锁
只要您的
服务
处于活动状态-回调也将处于活动状态。
请记住,该服务可能会被系统自动关闭,特别是当您的应用程序当前不在后台,或者内存压力较低时
我想你不必为这个担心唤醒锁,因为系统会为你“唤醒自己”。我想说,如果你有一个唤醒锁,你的服务将有更好的机会不被系统停止,但这将花费你的时间
记住这一点,再加上知道可能发生的“更糟糕”的想法是您的服务将被停止,从而得出结论,可以用更简单的方法解决此问题,而不是使用唤醒锁:在服务重新启动时执行gatt连接(您应该对此负责)。这样可以节省电池寿命,并且不会使CPU保持活动状态
我通过我的应用程序不断地进行后台扫描,并通过安卓服务类连接到GATT服务,我没有遇到任何你担心的问题
因此,我建议您在遇到具体问题之前不要担心这个问题。@Tal Kanel完全正确,您不必担心设备在这里处于深度睡眠状态,因为通过调用BluetoothGattCallback来提供结果的gatt服务绑定线程将唤醒您的应用程序。但你仍然需要一个安卓服务来让你的应用程序在后台保持活跃 如果可以,请提供一个AOSP代码,我可以在其中查看它是否唤醒处理器。没有以编程方式明确唤醒处理器。据我所知,BLE芯片通过发送连接和指示事件来唤醒主机线程。然后主机唤醒等待指示/连接事件的GattService绑定线程,然后这些绑定线程将结果传递给应用程序。在我们的应用程序中,我们还需要延长连接时间,并且我们的外围设备每分钟都会向中心发送数据,即使在深度睡眠时,应用程序也会收到这些数据。