我正在使用Android ble开发应用程序。该应用程序将使用ble连接外部设备。外部设备有一个记录数据的传感器,一旦Android设备进入范围,数据传输就开始了。 如果特定特征发生变化,并且当两个设备都连接时,Android应用程序将注册以通知,数据通过
传输 setCharacteristicNoification() --> onCharactericticChanged()
现在这适用于传感器在5-10分钟内收集的数据。但是如果超过15分钟的设备超出范围并且现在必须转移所有这些数据,则应用程序会自行退出。
在几个论坛上阅读此内容后,我检查了系统日志并发现了此错误:
BluetoothServiceJni: An exception was thrown by callback 'btgattc_notify_cb'.
BluetoothServiceJni: android.os.DeadObjectException
at android.os.BinderProxy.transactNative(Native Method)
at android.os.BinderProxy.transact(Binder.java:496)
at android.bluetooth.IBluetoothGattCallback$Stub$Proxy.onNotify(IBluetoothGattCallback.java:840)
at com.android.bluetooth.gatt.GattService.onNotify(GattService.java:838)
在多次重复此异常消息后,我收到此消息
BtGatt.AdvertiseManager: stop advertise for client 5
BtGatt.GattService: onAdvertiseInstanceDisabled() - clientIf=5, status=0
BtGatt.GattService: Client app is not null!
BtGatt.AdvertiseManager: failed onAdvertiseInstanceDisabled
android.os.DeadObjectException at
android.os.BinderProxy.transactNative(Native Method) at
android.os.BinderProxy.transact(Binder.java:496) at android.bluetooth.IBluetoothGattCallback$Stub$Proxy.onMultiAdvertiseCallback(IBluetoothGattCallback.java:874)at com.android.bluetooth.gatt.GattService.onAdvertiseInstanceDisabled(GattService.java:1242) at com.android.bluetooth.gatt.AdvertiseManager$AdvertiseNative.stopAdvertising(AdvertiseManager.java:318)at com.android.bluetooth.gatt.AdvertiseManager$ClientHandler.handleStopAdvertising(AdvertiseManager.java:212) at com.android.bluetooth.gatt.AdvertiseManager$ClientHandler.handleMessage(AdvertiseManager.java:175) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:135) at android.os.HandlerThread.run(HandlerThread.java:61)
BtGatt.AdvertiseManager: app died - unregistering client : 5
最后这条消息:
BtGatt.ContextMap: Context not found for ID 5
我不确定我的代码有什么问题以及代码的哪个部分导致了这个问题。 任何人都可以对这个问题有所了解吗?
答案 0 :(得分:2)
在阅读了几个论坛和StackOverflow帖子之后,我得出的结论是我的代码没有任何问题可能导致此次崩溃。
后台蓝牙服务无法处理正在传输的数据量。由于我们有自定义硬件,因此我们能够通过降低通知频率来实现它。
之前我们在7.5毫秒内发送了6个通知(= 96个字节)(android的最小连接间隔)。通过将时间间隔增加到10毫秒,我们能够稳定应用程序。
如果有人遇到类似的问题,您可能希望降低数据传输的频率,因为后台服务无法处理这种类型的吞吐量。