我正在创建此PublishProcessor,每10秒钟将其元素保存到数据库中
: val publishProcessor = PublishProcessor.create<Entity>()
publishProcessor
.buffer(10, SECONDS)
.observeOn(Schedulers.io())
.subscribe(
{ saveToDatabase(it) },
{ Log.e("TAG", "Error: $it") })
.addTo(compositeDisposable)
我的活动结束后,我想刷新当前缓冲区中的所有内容,而不要等待10秒。我该怎么办?
答案 0 :(得分:2)
将另一个主题作为缓冲区边界与间隔合并:
PublishSubject<Entity> publishProcessor = PublishSubject.create();
Subject<Long> flush = PublishSubject.<Long>create().toSerialized();
publishProcessor
.buffer(flush.mergeWith(Observable.interval(10, TimeUnit.MILLISECONDS)))
.observeOn(Schedulers.io())
.subscribe(...)
flush.onNext(1L);
如果您还想在手动冲洗时重置计时器
publishProcessor
.buffer(
flush.mergeWith(Observable.timer(10, TimeUnit.MILLISECONDS))
.take(1)
.repeat()
)
.observeOn(Schedulers.io())
.subscribe(...)