代码之家  ›  专栏  ›  技术社区  ›  Muhammad Ahmed AbuTalib

一劳永逸,杜恩苏比怎么样?

  •  0
  • Muhammad Ahmed AbuTalib  · 技术社区  · 7 年前

    考虑以下可观察链

            Observable.just(1).
                doOnSubscribe(disposable -> Log.d("ThreadInDoSub", Thread.currentThread().getName())).
                subscribe();
    

    日志报告线程是主线程。这没关系。现在

    Observable.just(1).
                doOnSubscribe(disposable -> Log.d("ThreadInDoSub", Thread.currentThread().getName())).
                subscribeOn(SchedulerProvider.getInstance().io()).
                observeOn(SchedulerProvider.getInstance().ui()).
                subscribe();
    

    日志报告RxCachedThreadScheduler。现在

    Observable.just(1).
            subscribeOn(SchedulerProvider.getInstance().io()).
            observeOn(SchedulerProvider.getInstance().ui()).
            doOnSubscribe(disposable -> Log.d("ThreadInDoSub", Thread.currentThread().getName())).
            subscribe();
    

    日志报告主。

    问题 为什么doonsub的位置会影响调用它的线程?。整个链不是在命中subscribe方法时执行的吗?我很困惑。

    1 回复  |  直到 7 年前
        1
  •  1
  •   akarnokd    7 年前

    subscribeOn 电话 onSubscribe 在将订阅调度到给定调度程序的上游之前,在其下游,因此 doOnSubscribe 在以下线程上调用 认购 获得订阅。这样做是为了更急切地取消日程安排。