没有Completable.defer,我不知道我的函数在哪里工作

时间:2019-04-01 18:07:29

标签: java android rx-java rx-android

我很困惑。我没有找到任何有关此的文章。 检查我的示例,在这种情况下,longOperation将在Schedulers.io()

上运行
 private Completable longOperation() throws InterruptedException {
          Thread.sleep(5000);
          return Completable.complete();
      }

    private void doSomething() throws InterruptedException {
        CompositeDisposable compositeDisposable = new CompositeDisposable();
        compositeDisposable.add(Completable.defer(() -> longOperation())
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribeWith(new DisposableCompletableObserver() {
                    @Override
                    public void onComplete() {
                        customToast("long operation done");
                    }

                    @Override
                    public void onError(Throwable e) {

                    }
                }));
    }

但是如果我要删除Completable.defer(() -> longOperation()

private void doSomething() throws InterruptedException {
        CompositeDisposable compositeDisposable = new CompositeDisposable();
        compositeDisposable.add(longOperation()
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribeWith(new DisposableCompletableObserver() {
                    @Override
                    public void onComplete() {
                        customToast("long operation done");
                    }

                    @Override
                    public void onError(Throwable e) {

                    }
                }));
    }

我不知道在哪里。 我的方法'longOperation'将在哪个线程上工作?我问是因为在不带Completable.defer的情况下调用doSomething后冻结了UI。

0 个答案:

没有答案