使用 long write builder 在每批写入之间添加延迟

Adding a delay in between each batch write using long write builder

我试图在每批写入之间添加一个延迟,我设法通过修改此 example 使其工作,但我不确定这是实现此目的的正确方法吗?

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

如果 Observable.timer().repeat()booleanObservable 之后发出,您的方法将延迟下一次(子)写入。不幸的是,这仅适用于第二次(子)写入,因为在那之后 .repeat() 将开始非常快速地发出,因为它不会重新订阅上游 Observable。来自 .repeat() Javadoc:

Returns an Observable that repeats the sequence of items emitted by the source ObservableSource indefinitely.

如果您使用 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()