使用 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()
我试图在每批写入之间添加一个延迟,我设法通过修改此 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()