RxJava2线程切换原理

以下面代码为例:

以下面代码为例:

      Observable.just("HELLO WORLD")
                .map(new Function() {
                    @Override
                    public String apply(@NonNull String s) throws Exception {
                        s = s.toLowerCase();
                        return s;
                    }
                })
                .subscribeOn(Schedulers.computation())
                .map(new Function() {

                    @Override
                    public String apply(String s) throws Exception {
                        s = s + "map";
                        return s;
                    }
                })
                .observeOn(Schedulers.newThread())
                .subscribe(new Consumer() {
                    @Override
                    public void accept(@NonNull String s) throws Exception {
                        System.out.println(s);
                    }
                });

简单分析一下代码执行流程

  1. 从上到下,建立上下依赖关系,初始化线程
  2. .subscribe为调用起点,自下向上开始准备调用,这个过程subscribeOn起作用,observeOn不起切换线程作用。
  3. 从上到下执行,类似map中的代码,这时候observeOn起切换线程作用。

调用流程简化如下:
RxJava2线程切换原理_第1张图片

涉及的相关类:
RxJava2线程切换原理_第2张图片

这也是为什么subscribeOn只有第一次起作用,observeOn每次都起作用。

你可能感兴趣的:(RxJava2线程切换原理)