Добавление задержки между каждой пакетной записью с использованием конструктора длинной записи - PullRequest
0 голосов
/ 15 апреля 2020

Я пытаюсь добавить задержку между каждой пакетной записью, и мне удалось заставить ее работать, изменив этот пример , но я не уверен, что это правильный путь для достижения этой цели?

rxBleConnection.createNewLongWriteBuilder()
              .setCharacteristicUuid(characteristic)
              .setBytes(data)
              .setWriteOperationAckStrategy(booleanObservable -> {
                  return Observable.zip(
                      Observable.timer(delayInMillis, MILLISECONDS).repeat()
                      ,booleanObservable, (callback0, aBoolean) -> aBoolean);
              })
              .build()

1 Ответ

0 голосов
/ 15 апреля 2020

Ваш подход задержит следующую (под) запись, если Observable.timer().repeat() будет излучать после booleanObservable. К сожалению, это сработало бы только для второй (под) записи, так как после этого .repeat() начал бы излучать очень быстро, так как он не переписывался на последующий поток Observable. From .repeat() Javado c:

Возвращает Observable, который бесконечно повторяет последовательность элементов, излучаемых источником ObservableSource.

Если вы используете Observable.timer(delayInMillis, MILLISECONDS).repeatWhen(completions -> completions) или Observable.interval(delayInMillis, MILLISECONDS), тогда эти записи будут происходить не чаще, чем delayInMillis, MILLISECONDS.

Если вы хотите дать периферийному устройству delayInMillis, MILLISECONDS время до выдачи следующей записи, то, похоже, существует более простой подход:

rxBleConnection.createNewLongWriteBuilder()
    .setCharacteristicUuid(characteristic)
    .setBytes(data)
    .setWriteOperationAckStrategy(booleanObservable -> booleanObservable.delay(delayInMillis, MILLISECONDS))
    .build()
...