RxAndroidBle 接收通知更快
RxAndroidBle receive notifications faster
我是 RxJava
的新手。我现在尝试 RxAndroidBle 并将其与 BLE 的 Android API 实现进行比较。我的外围设备一次发送很多 notifications
(512b 块中大约 30kB)。在 Rx 中,接收它们大约需要 10-12 秒。
当我尝试使用 Android API 时,大约需要 2-3 秒。
在我的 RxAndroidBle 实现中,我按照示例应用程序中的建议进行操作:
connectionObservable
.flatMap(rxBleConnection -> rxBleConnection.setupNotification(UUID.fromString(mCharacteristicUUID)))
.doOnNext(notificationObservable -> runOnUiThread(this::notificationHasBeenSetUp))
.flatMap(notificationObservable -> notificationObservable)
.observeOn(AndroidSchedulers.mainThread())
.subscribe(
this::onNotificationReceived,
this::onNotificationSetupFailure
);
有什么方法可以让它更快吗?
在您的代码中,通知在主线程上消耗,主线程也用于刷新 UI。如果您不更新 UI 并希望获得尽可能高的性能,您可以删除 .observeOn(AndroidSchedulers.mainThread())
行。
示例只是示例 — 它们很少针对特定用例(在本例中为性能)进行优化。
考虑到 your other question 并且 OS 或您的外围设备在原版 Android API 和 RxAndroidBle
使用时似乎工作方式不同也值得问一个问题,这两种实现是否在相同的条件下工作。
我是 RxJava
的新手。我现在尝试 RxAndroidBle 并将其与 BLE 的 Android API 实现进行比较。我的外围设备一次发送很多 notifications
(512b 块中大约 30kB)。在 Rx 中,接收它们大约需要 10-12 秒。
当我尝试使用 Android API 时,大约需要 2-3 秒。
在我的 RxAndroidBle 实现中,我按照示例应用程序中的建议进行操作:
connectionObservable
.flatMap(rxBleConnection -> rxBleConnection.setupNotification(UUID.fromString(mCharacteristicUUID)))
.doOnNext(notificationObservable -> runOnUiThread(this::notificationHasBeenSetUp))
.flatMap(notificationObservable -> notificationObservable)
.observeOn(AndroidSchedulers.mainThread())
.subscribe(
this::onNotificationReceived,
this::onNotificationSetupFailure
);
有什么方法可以让它更快吗?
在您的代码中,通知在主线程上消耗,主线程也用于刷新 UI。如果您不更新 UI 并希望获得尽可能高的性能,您可以删除 .observeOn(AndroidSchedulers.mainThread())
行。
示例只是示例 — 它们很少针对特定用例(在本例中为性能)进行优化。
考虑到 your other question 并且 OS 或您的外围设备在原版 Android API 和 RxAndroidBle
使用时似乎工作方式不同也值得问一个问题,这两种实现是否在相同的条件下工作。