是否有可能在设备休眠时调用Callback而不获取唤醒锁定

时间:2015-03-18 08:59:09

标签: android android-service bluetooth-lowenergy android-bluetooth android-wake-lock

即使手机进入睡眠状态,我也希望跟踪与BLE device的关联 - 还有一个回调来跟踪连接/断开BluetoothGattCallback

因此,从上面的教程中可以看到Service

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);

如你所见,我没有在任何地方获得唤醒锁。

  1. 那么如果设备进入休眠状态,回调会发生什么?
  2. 会被叫吗?或者我需要明确获取唤醒锁。
  3. 或者,BluetoothDevice可能会在调用回调时关注设备唤醒? (但我发现它没有在任何地方记录)

2 个答案:

答案 0 :(得分:1)

只要你的Service还活着 - 那么回调也是如此。  请记住,该服务可能会被系统自动关闭,特别是如果您的应用当前不在后台,或者内存压力很低。

我猜你不需要担心这个唤醒锁,因为系统会为你“唤醒”。我会说,如果你有一个唤醒锁定,你的服务将有更好的机会不被系统阻止,但它会花费你precious battery life, and extra permissions

牢记这一点,再加上知道可能发生的“更糟糕”的想法是你的服务将被停止,结论是用唤醒锁解决这个问题,可以用更简单的方式解决:当服务重新启动时执行gatt连接!(你应start it as sticky为此)。这样你就可以节省电池寿命,并且不会使CPU保持有效。

我正在从我的应用程序不断进行背景定期BLE扫描,并从android Service类连接到GATT服务,我没有遇到任何你担心的问题。

所以我建议你在遇到具体问题之前不要担心。

答案 1 :(得分:0)

@Tal Kanel是绝对正确的,你不必担心设备处于深度睡眠状态,因为通过调用BluetoothGattCallback提供结果的gatt服务绑定器线程会唤醒你的应用程序。但是你仍然需要一个Android服务来保持你的应用程序在后台运行。