如何使用 RxJava 2 的 CompositeDisposable?

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/39203791/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-11 20:58:07  来源:igfitidea点击:

How to use CompositeDisposable of RxJava 2?

javaandroidrx-javarx-java2rx-android

提问by anand gaurav

In RxJava 1, there was CompositeSubscription, but that is not present in RxJava2, There is something CompositeDisposable in rxJava2. How do I use CompositeDisposable or Disposable in RxJava2?

在 RxJava 1 中,有 CompositeSubscription,但在 RxJava2 中没有,在 rxJava2 中有 CompositeDisposable。如何在 RxJava2 中使用 CompositeDisposable 或 Disposable?

采纳答案by Amit Shekhar

private final CompositeDisposable disposables = new CompositeDisposable();


// adding an Observable to the disposable
disposables.add(sampleObservable()
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribeWith(new DisposableObserver<String>() {
                    @Override
                    public void onComplete() {
                    }

                    @Override
                    public void onError(Throwable e) {
                    }

                    @Override
                    public void onNext(String value) {
                    }
                }));

    static Observable<String> sampleObservable() {
        return Observable.defer(new Callable<ObservableSource<? extends String>>() {
            @Override
            public ObservableSource<? extends String> call() throws Exception {
                // Do some long running operation
                SystemClock.sleep(2000);
                return Observable.just("one", "two", "three", "four", "five");
            }
        });
    }                


// Using clear will clear all, but can accept new disposable
disposables.clear(); 
// Using dispose will clear all and set isDisposed = true, so it will not accept any new disposable
disposables.dispose(); 

I have created a sample project to demonstrate the use of RxJava2. Here you can find the sample project - RxJava2-Android-Samples

我创建了一个示例项目来演示 RxJava2 的使用。在这里你可以找到示例项目 - RxJava2-Android-Samples

回答by u7754474

// clearing or unsubscibing
  disposables.clear(); 

this place use dispose()

这个地方使用 dispose()

回答by Seroj Grigoryan

CompositeDisposablecannot be reused after being disposed. If you want sync disposable lifecycle with Android Activity lifecycle, it is possible to correspond by making a simple wrapper.

CompositeDisposable废弃后不能再利用。如果您想将一次性生命周期与 Android Activity 生命周期同步,可以通过制作一个简单的包装器来对应。

class AndroidDisposable {
    private var compositeDisposable: CompositeDisposable? = null

    fun add(disposable: Disposable) {
        if (compositeDisposable == null) {
            compositeDisposable = CompositeDisposable()
        }
        compositeDisposable?.add(disposable)
    }

    fun dispose() {
        compositeDisposable?.dispose()
        compositeDisposable = null
    }
}

How to use:

如何使用:

class MainActivity : AppCompatActivity() {
    private disposable = AndroidDisposable()

    override fun onStart() {
        super.onStart()
        disposable.add(/* Some disposable */)
    }

    override fun onStop() {
        disposable.dispose()
        super.onStop()
    }
}