我有这样的服务器轮询解决方案:
Observable
.interval(UPDATE_PERIOD_SEC, UPDATE_PERIOD_SEC,
TimeUnit.SECONDS, Schedulers.newThread())
.flatMap(new Func1<Long, Observable<NewMessagesCountModel>>() {})
.retry()
.distinct()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.compose(this.<NewMessagesCountModel>bindToLifecycle())
.subscribe(new Subscriber<NewMessagesCountModel>() {});
我希望在不等待下一轮询事件的情况下立即更新数据。我该怎么办?
答案 0 :(得分:1)
每当您想要触发服务电话时,您可以混合PublishSubject
并呼叫onNext()
:
PublishSubject<Long> manual = PublishSubject.create();
Observable
.interval(UPDATE_PERIOD_SEC, UPDATE_PERIOD_SEC,
TimeUnit.SECONDS, Schedulers.newThread())
.mergeWith(manual.onBackpressureDrop().observeOn(Schedulers.newThread()))
.flatMap(new Func1<Long, Observable<NewMessagesCountModel>>() {})
.retry()
.distinct()
.observeOn(AndroidSchedulers.mainThread())
.compose(this.<NewMessagesCountModel>bindToLifecycle())
.subscribe(new Subscriber<NewMessagesCountModel>() {});
manual.onNext(-100L);
此外,我认为没有必要调用subscribeOn
,因为没有副作用可以从调用线程移开。
如果您想避免手动通话过于接近定期通话,可以在debounce
之前应用flatMap
。
答案 1 :(得分:0)
只需在没有间隔运算符的情况下创建另一个没有间隔的observable。
Observable
.flatMap(new Func1<Long, Observable<NewMessagesCountModel>>() {})
.retry()
.distinct()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.compose(this.<NewMessagesCountModel>bindToLifecycle())
.subscribe(new Subscriber<NewMessagesCountModel>() {});