重点参考文章:RxJava基本流程和lift源码分析
1.首先创建初始的Observable、Subscriber对象;操作符map的入参是Func1类型的,我们创建一个Func1类型的对象:
2.代码的主体就是:
Observable.create(onSubscribe1) .map(transformer1); .subscribe(subscriber1); 3.涉及的操作符的实现:
4.我们将代码主体逐句拆解开,看一下逻辑流:
5.代码执行的顺序是从Observable.subscribe()触发的,执行流如下图:
5.分析执行结果:
我们的代码主体是:
Observable.create(onSubscribe1) .map(transformer1); .subscribe(subscriber1); 实际的执行逻辑是: subscriber1.onStart(); subscriber2.onStart(); R result = transformer1.call("1"); subscriber1.onNext(result); subscriber1.onCompleted(); 5.1 初始的 observable1中的subscriber指的并不是subscriber1,而是map操作符创建的临时subscriber2;5.2 map操作临时创建了一个Observable和Subscriber对象;它作为链条上游(observable1)的订阅者Subscriber,作为链条下游(subscriber1)的被/可观察对象Observable; 最近又看到了一篇写Map原理的文章,写得挺不错。推荐下:RxJava进阶之源码分析map() 操作符分析
