Rx java RxJava:如何刷新定时缓冲区?
我正在创建一个PublishProcessor,它每10秒将其元素保存到数据库中:Rx java RxJava:如何刷新定时缓冲区?,rx-java,rx-java2,rx-android,Rx Java,Rx Java2,Rx Android,我正在创建一个PublishProcessor,它每10秒将其元素保存到数据库中: val publishProcessor = PublishProcessor.create<Entity>() publishProcessor .buffer(10, SECONDS) .observeOn(Schedulers.io()) .subscribe( { saveToDatabase(it) }
val publishProcessor = PublishProcessor.create<Entity>()
publishProcessor
.buffer(10, SECONDS)
.observeOn(Schedulers.io())
.subscribe(
{ saveToDatabase(it) },
{ Log.e("TAG", "Error: $it") })
.addTo(compositeDisposable)
val publishProcessor=publishProcessor.create()
出版处理机
.缓冲区(10秒)
.observeOn(Schedulers.io())
.订阅(
{saveToDatabase(it)},
{Log.e(“标记”,“错误:$it”)})
.addTo(可合成)
当我的活动完成时,我希望刷新当前缓冲区中的所有内容,而不是等待10秒。如何做到这一点?将另一个主题作为缓冲区边界,并与一个间隔合并:
PublishSubject publishProcessor=PublishSubject.create();
主题刷新=PublishSubject.create().toSerialized();
出版处理机
.buffer(flush.mergeWith(可观察的时间间隔(10,TimeUnit.ms)))
.observeOn(Schedulers.io())
.订阅(…)
冲洗下一层(1L);
如果您还想在手动冲洗时重置计时器
publishProcessor
.缓冲器(
flush.mergeWith(可观察的计时器(10,TimeUnit.ms))
.采取(1)
.重复
)
.observeOn(Schedulers.io())
.订阅(…)
谢谢你,大卫!我用一个示例创建了一个要点,并测试了是否有人感兴趣。另外,您是否能够解释repeat()
在这里到底做了什么?我天真地希望repeat()
只返回一个单元
,但它似乎返回的是merge()
的结果,这允许重置间隔?计时器为1次拍摄,拍摄(1)只接受一个信号。重复是为了确保一个新的计时器和一个新的冲洗连接一次又一次地建立起来。