RxJava

120 阅读1分钟

零散的点

1. RxJava调用流程
  1. 所有逻辑的调用都通过最后的subscribe触发
  2. 最后一行subscribe执行后,首先自下而上依次调用,到顶之后,再自上而下依次调用对应Observer的onSubscribe + onSuccess . RxJava调用流程.png
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
  1. subscribeOn用于指定 初始数据源 在什么线程中获取.
  2. 多次执行subscribeOn,只有第一次subscribeOn时指定的线程是生效的.
  3. 第一次执行subscribeOn后,若未设置observeOn, 则初始数据源获取 及 后续所有操作都是在subscribeOn里指定的线程.
    • 若后续又执行了observeOn,则初始数据源获取后的操作是在最新的observeOn里指定的线程.