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绑定线程,然后这些绑定线程将结果传递给应用程序。在我们的应用程序中,我们还需要延长连接时间,并且我们的外围设备每分钟都会向中心发送数据,即使在深度睡眠时,应用程序也会收到这些数据。