Android 架构师之响应式编程 RxJava 操作符源码分析与实现

操作符简介

操作符:将发出的数据进行处理并再发送

变化传播–通过操作符实现变化,并能向下传播

Android 架构师之响应式编程 RxJava 操作符源码分析与实现

1.RxJava1 操作符源码分析

1.Func1 接口

2.Operator 接口

1.1RxJava1 实例

运行

1.2RxJava1 操作符源码

Android 架构师之响应式编程 RxJava 操作符源码分析与实现

RxJava1 中 OnSubscribeMap 类

RxJava1 中 OnSubscribeLift 类

1.3 变换的原理(核心操作符 lift):

1. 接收原 OnSubscribe 的当前的 Operator

2. 创建一个新的 OnSubscribe 并返回新的 Observable

3. 用新的 Subscriber 包裹旧的 Subscriber

4. 在新的 Subscriber 里做完变换再传给旧的 Subscriber

分析

核心实现使用了代理机制

Android 架构师之响应式编程 RxJava 操作符源码分析与实现

2.RxJava2 操作符源码分析

2.1.RxJava2 实例

运行

2.2.RxJava2 操作符源码

Function 接口

ObservableMap :无背压

1.ObservableMap 继承了 AbstractObservableWithUpstream 抽象类

2. 利用了 AbstractObservableWithUpstream 中 subscribeActual 方法

3. 用原 Observable 去 subscribe 变换后的 Observer

FlowableMap: 有背压

1.FlowableMap 继承了 AbstractFlowableWithUpstream

2. 利用了 AbstractFlowableWithUpstream 中的 subscribeActual 方法

3. 用原 Flowable 去 subscribe 变换后的 Subscriber

FlowableLift

2.3Operator 接口

分析

RxJava2 有背压和无背压核心实现使用了代理机制

3.RxJava1 操作符功能仿写实现

Operator 接口实现

lift 操作符

map 操作符

调用

Log 输出

3.RxJava2(无背压) 操作符功能仿写实现

CallerWithUpstream(类似于 AbstractObservableWithUpstream)

map 操作符

CallerOperator 接口

相关代码:

4.RxJava2(有背压) 操作符功能仿写实现

TelephonerOperator 接口

TelephonerWithUpstream(类似于 AbstractObservableWithUpstream)

相关源码