[RxJava学习]操作符Map源码分析

重点参考文章:RxJava基本流程和lift源码分析

1.首先创建初始的Observable、Subscriber对象;操作符map的入参是Func1类型的,我们创建一个Func1类型的对象:

[RxJava学习]操作符Map源码分析_第1张图片

2.代码的主体就是:

Observable.create(onSubscribe1)
        .map(transformer1);
        .subscribe(subscriber1);

3.涉及的操作符的实现:

[RxJava学习]操作符Map源码分析_第2张图片

4.我们将代码主体逐句拆解开,看一下逻辑流:

[RxJava学习]操作符Map源码分析_第3张图片

5.代码执行的顺序是从Observable.subscribe()触发的,执行流如下图:

[RxJava学习]操作符Map源码分析_第4张图片

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() 操作符分析

你可能感兴趣的:(RxJava)