RxAndroidBle быстрее получает уведомления

Я совсем новичок в RxJava. Сейчас я пробую RxAndroidBle и сравниваю его с реализацией Android API для BLE. Мое периферийное устройство отправляет сразу много notifications (около 30 КБ фрагментами по 512 байт). В 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
    );

Есть ли способ сделать это быстрее?


person Nataliya Le Loup    schedule 14.06.2018    source источник


Ответы (1)


В вашем коде уведомления потребляются в основном потоке, который также используется для обновления пользовательского интерфейса. Если вы не обновляете пользовательский интерфейс и хотите добиться максимально возможной производительности, вы можете избавиться от строки .observeOn(AndroidSchedulers.mainThread()).

Образцы — это всего лишь образцы — они редко оптимизируются для конкретного варианта использования (в данном случае для производительности).

Имея в виду ваш другой вопрос и то, что ОС или ваше периферийное устройство, похоже, работают по-разному при использовании vanilla Android API и RxAndroidBle, возможно, также стоит задать вопрос, работают ли обе реализации в одинаковых условиях.

person Dariusz Seweryn    schedule 15.06.2018
comment
Действительно, это сработало, удаление этой строки сильно увеличило скорость, теперь тоже на 2-3 секунды. И да, на данный момент я всегда тестирую одну и ту же реализацию сервера на периферии. Большое спасибо за вашу помощь! - person Nataliya Le Loup; 18.06.2018