RxJava2如何正确退订过时的结果

时间:2018-09-05 08:40:37

标签: android rx-java2 rx-android

对于那些有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()被多次调用,我只需要向用户显示最后一组排放。

是否可以取消过期的排放?
有什么建议吗?
预先感谢。

2 个答案:

答案 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

Check this

 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()
}
相关问题