序
- 本篇的目的在于 “通过代码执行的流程,以观察者模式的拉模型,对RxJava的思想进行理解”
前置知识
- 观察者模式
- RxJava基本用法
- RxJava源码大概阅读
代码执行流程
Observable.create(new ObservableOnSubscribe()).map(xxx).map(xxx).subscribeOn(xxx).observeOn(xxx).subscribe(new Observer())
- 这段代码执行的代码顺序如下:
时序图:
简略流程图
理解
- 总体分三步,第一步创建所有的被
观察者对象
(observable);执行了最后的subscribe()
方法的瞬间,开始第二步:从下游往上注册所有观察者(observer);紧接着第三步:从最上游发数据一直发到最下游(onNext),可以看成是观察者模式的notify操作。 - 实际上,想按常规观察者模式来看RxJava不太好理解,因为它跟常规观察者模式 “一对多,被观察者主动更新观察者” 的思想不太一样。RxJava其实是一种 “拉模型” 的观察者模式,而不是常规的 “推模型” ,区别就在于 “拉模式” 是观察者主动去拉取被观察者的数据(可以理解成git的pull操作),RxJava的“拉”操作就是
subscribe
这个方法。 - 本质上,调用
subscribe
拉取操作的瞬间,biubiubiubiu往上注册,再biubiubiubiu往下发送,最终在我们创建的Observer的onNext方法里拿到数据。