Rx-java2 - 使用doFinally运算符清除CompositeDisposable

时间:2017-07-08 13:07:01

标签: android rx-java2

我正在使用rx-java2来处理android app中的异步作业。

我正在创建Single<Long>,我使用DisposableSingleObserver订阅并返回Disposable,我添加到CompositeDisposable

// Instantiate a CompositeDisposable.
Composite mCompositeDisposable = new CompositeDisposable();

// Create a Single<Long>.
Single<Long> mDisposable= 
    Single
          .create(
                    new SingleOnSubscribe<Long>() {
                        @Override
                        public void subscribe(@io.reactivex.annotations.NonNull final SingleEmitter<Long> singleEmitter) throws Exception {
                            // Do a time consuming job and return a Long.
                        }
                    })
          .subscribeOn(Schedulers.io())
          .observeOn(Schedulers.io())
          .doFinally(
                      new Action() {
                            @Override
                            public void run() throws Exception {
                                if(!mCompositeDisposable.isDisposed()){
                                    // Dispose of all Disposables in mCompositeDisposable.
                                    wCompositeDisposable.clear();
                                }
                            }
                      })
          // Subscribe and return a Disposable.           
          .subscribeWith(
                          new DisposableSingleObserver<Long>() {
                             // Handle success or error here.
                          })

// Add Disposable to mCompositeDisposable.
mCompositeDisposable.add(mDisposable);

在单身mCompositeDisposable中清除mDisposable(处理方式doFinally())是否安全?虽然在运行上面的代码时,一切似乎都按预期工作,但在自己的流中处理某些东西似乎有点危险。

0 个答案:

没有答案