我一直在实现一个从BLE设备流式传输数据的应用程序。对于某些背景,此设备通过11.25ms的连接间隔发送数据。我目前正在开发运行Marshmallow的Nexus 9平板电脑。
连接到设备,特性的R / W似乎运行良好。一旦我开始订阅特征通知,触发BluetoothGattCallback.OnCharacteristicChanged()回调就会出现问题。我的应用程序立即从4%上升到15%的CPU。
使用characteristic.GetValue()方法从回调中获取当前字节值需要更长时间,将CPU提升到~30%。看看DDMS,看起来OnCharacteristicChanged()开始占用大量的CPU时间。此外,GC开始不断运行,
我在Android工作室实现了这一功能,总CPU使用率<5%,而OnCharaceristicChanged()回调占用的CPU时间要少得多。在我看来,要么FeatureChanged回调的线程池分配有问题,要么单声道Android.Bluetooth实现中的一些其他问题。
Native App Trace For Characteristic Notification
Xamarin App Trace For Characteristic Notification
::<>