Добавление задержки между каждой пакетной записью с использованием построителя длинных записей

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

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

person RandomIO    schedule 15.04.2020    source источник


Ответы (1)


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

Возвращает 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()
person Dariusz Seweryn    schedule 15.04.2020
comment
Спасибо, это было неправильно, я думаю, это было просто побочным эффектом, возможно, перегрузка испусканиями просто замедляла работу. Ваше решение отлично работает. - person RandomIO; 16.04.2020