When to call dispose and clear on CompositeDisposable

后端 未结 3 1075
清酒与你
清酒与你 2020-12-29 18:02

My question can be a duplicate of How to use CompositeDisposable of RxJava 2? But asking to clear one more doubt. According to the accepted answer

// Using          


        
相关标签:
3条回答
  • 2020-12-29 18:30

    You're right, you can save yourself from creating a new CompositeDisposable for each time the corresponding view is created, but instead treat a CompositeDisposable as a single instance tied to the onCreate/onDestroy lifecycle methods and treat aggregated disposables as part of the fragment view calling clear in onDestroyView.

    0 讨论(0)
  • 2020-12-29 18:31

    Instead of using CompositeDisposable.dispose(), you can better use CompositeDisposable.clear() so you don't have to create a new CompositeDisposable: method documentation.

    clear() //Atomically clears the container, then disposes all the previously contained Disposables.
    
    dispose() //Dispose the resource, the operation should be idempotent.
    
    0 讨论(0)
  • 2020-12-29 18:33
    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(); 
    
    • Clear - onStop()
    • Dispose - onDestroy()

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

    0 讨论(0)
提交回复
热议问题