• 本篇的目的在于 “通过代码执行的流程,以观察者模式的拉模型,对RxJava的思想进行理解”

前置知识

  1. 观察者模式
  2. RxJava基本用法
  3. RxJava源码大概阅读

代码执行流程

  • Observable.create(new ObservableOnSubscribe()).map(xxx).map(xxx).subscribeOn(xxx).observeOn(xxx).subscribe(new Observer())
  • 这段代码执行的代码顺序如下:

时序图:

RxJava--一图胜千言

简略流程图

RxJava--一图胜千言

理解

  1. 总体分三步,第一步创建所有的被观察者对象(observable);执行了最后的subscribe()方法的瞬间,开始第二步:从下游往上注册所有观察者(observer);紧接着第三步:从最上游发数据一直发到最下游(onNext),可以看成是观察者模式的notify操作。
  2. 实际上,想按常规观察者模式来看RxJava不太好理解,因为它跟常规观察者模式 “一对多,被观察者主动更新观察者” 的思想不太一样。RxJava其实是一种 “拉模型” 的观察者模式,而不是常规的 “推模型” ,区别就在于 “拉模式” 是观察者主动去拉取被观察者的数据(可以理解成git的pull操作),RxJava的“拉”操作就是 subscribe 这个方法。
  3. 本质上,调用 subscribe 拉取操作的瞬间,biubiubiubiu往上注册,再biubiubiubiu往下发送,最终在我们创建的Observer的onNext方法里拿到数据。

扩展:

背景:subscribeOn只会在第一次执行时生效、observeOn每次调用都生效,如何通过本文对这个现象进行解答?

相关文章: