对于那些有RxJava2经验的人,我有一个问题。
这是我的方法(代码简化):
public void getRows(){
/*ui clear*/
helper.getObservable(argumentRowsDependOn)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(row -> {
/* now, I'm showing each row to user*/
});
}
创建行可能是耗时的操作,因此每次发射后我都要更新UI。
问题是方法getRows()
被多次调用,我只需要向用户显示最后一组排放。
是否可以取消过期的排放?
有什么建议吗?
预先感谢。
答案 0 :(得分:0)
private disposable: Disposable
public void getRows(){
/*ui clear*/
if(disposable != null) disposable.dispose()
disposable = helper.getObservable(argumentRowsDependOn)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(row -> {
/* now, I'm showing each row to user*/
});
}
如果使用RxJava2,则类似这样。每次调用getRows时,您都将停止较早的订阅
答案 1 :(得分:0)
您可以使用CompositeDisposable
。
val disposables = CompositeDisposable()
disposables.add(service.login(user)
.observeOn(AndroidSchedulers.mainThread())
.subscribeOn(Schedulers.io())
.subscribeWith(object : DisposableObserver<JsonObject>() {
override fun onComplete() {
//do something
}
override fun onNext(task: JsonObject) {
//do something
}
override fun onError(e: Throwable) {
e.printStackTrace()
}
}))
}
然后根据您的情况致电dispose()
或clear()
。
如果您致电dispose()
,也会处置CompositeDisposable
。
但是,如果您致电clear()
,则可以在dispsoables
CompositeDisposable
override fun onDestroy() {
super.onDestroy()
disposables.dispose()
}