一劳永逸,doOnSubcribe怎么了
Once and for all , whats up with doOnSubcribe
考虑以下可观察链
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 的位置会影响调用它的线程? .整个链条不是在点击订阅方法时执行的吗? .我很困惑。
subscribeOn
在其下游调用 onSubscribe
,然后在给定调度程序上安排对其上游的订阅,因此 doOnSubscribe
在订阅 subscribeOn
的线程上被调用到。这样做是为了更急切地取消日程。
考虑以下可观察链
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 的位置会影响调用它的线程? .整个链条不是在点击订阅方法时执行的吗? .我很困惑。
subscribeOn
在其下游调用 onSubscribe
,然后在给定调度程序上安排对其上游的订阅,因此 doOnSubscribe
在订阅 subscribeOn
的线程上被调用到。这样做是为了更急切地取消日程。