2015-10-20 38 views
0

我有这样的服务器轮询的解决方案:RxJava。罕见extraordinal信息定期轮询服务器

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

只是在没有间隔运算符的情况下创建另一个没有间隔的观察值。

Observable 
    .flatMap(new Func1<Long, Observable<NewMessagesCountModel>>() {}) 
    .retry() 
    .distinct() 
    .subscribeOn(Schedulers.io()) 
    .observeOn(AndroidSchedulers.mainThread()) 
    .compose(this.<NewMessagesCountModel>bindToLifecycle()) 
    .subscribe(new Subscriber<NewMessagesCountModel>() {}); 
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因为没有副作用被移出调用线程。

如果您希望避免手动呼叫太接近定期呼叫,您可以在flatMap之前应用debounce