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 使用时似乎工作方式不同也值得问一个问题,这两种实现是否在相同的条件下工作。