零散的点
1. RxJava调用流程
- 所有逻辑的调用都通过最后的subscribe触发
- 最后一行subscribe执行后,首先自下而上依次调用,到顶之后,再自上而下依次调用对应Observer的onSubscribe + onSuccess .

2. observeOn可以不断的切换线程,改变的是后续操作所在的线程
service.f1("0")
.subscribeOn(Schedulers.io())
.observeOn(Schedulers.newThread())
.doOnSuccess(new Consumer<OnePageHomeArticlesResponse>() {
@SuppressLint("LongLogTag")
@Override
public void accept(OnePageHomeArticlesResponse onePageHomeArticlesResponse) throws Exception {
Log.d(TAG,"accept. 1. " + gainThreadInfo());
}
})
.observeOn(Schedulers.computation())
.doOnSuccess(new Consumer<OnePageHomeArticlesResponse>() {
@SuppressLint("LongLogTag")
@Override
public void accept(OnePageHomeArticlesResponse onePageHomeArticlesResponse) throws Exception {
Log.d(TAG,"accept. 2. " + gainThreadInfo());
}
})
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Consumer<OnePageHomeArticlesResponse>() {
@SuppressLint("LongLogTag")
@Override
public void accept(OnePageHomeArticlesResponse onePageHomeArticlesResponse) throws Exception {
Log.d(TAG,"accept. 3. " + gainThreadInfo());
}
});
D/WanAndroidHomeArticlesActivity: accept. 1. id:RxNewThreadScheduler-1 ; name:RxNewThreadScheduler-1
D/WanAndroidHomeArticlesActivity: accept. 2. id:RxComputationThreadPool-1 ; name:RxComputationThreadPool-1
D/WanAndroidHomeArticlesActivity: accept. 3. id:main ; name:main
3. subscribeOn
- subscribeOn用于指定 初始数据源 在什么线程中获取.
- 多次执行subscribeOn,只有第一次subscribeOn时指定的线程是生效的.
- 第一次执行subscribeOn后,若未设置observeOn, 则初始数据源获取 及 后续所有操作都是在subscribeOn里指定的线程.
- 若后续又执行了observeOn,则初始数据源获取后的操作是在最新的observeOn里指定的线程.