- 整体流程: Observable.subscribe(Observer)
- 从上往下先是逐步构造Observable, 并将上游的Observable保存好(一般叫source),直到遇到Observer, 然后开始调用每个Observable内部的subscribeActual(Observer),插一句上句话几乎适用所有的Observable,但是要剔除ObservableSubscribeOn和ObservalbeObserveOn。Observable.subscribeActual(Observer)的内部实现多数是调用上游Observable的subscribe方法,并传入自己构造的Observer, 自己的Observer会把当前Observer当作下游(downstream)保存起来。
- 这样就从上至下构造了嵌套的Observable,又从下至上构造了嵌套的Observer, 最终遇到ObservableOnSubscribe又从上往下走, 由其中的CreateEmitter逐次发布事件,由各个Observer去逐步触发。
- 整体流程是逐步走的,流程的感觉,或者说是依次执行(线程可能略不相同),似流水一般。
- 非常重要的类:Observable, ObservableOnSubscribe, ObservableCreate, CreateEmitter, LambdaObserver, ObservableSubscirbeOn, ObservableObserveOn. ObservableSubscirbeOn - 对onSubscribe及subscribe的处理, ObservableObserveOn - 对其他on事件的处理。
- 完整的一条流,使用subscribeOn, observeOn划分成块。
- onSubscribe发生在构造Observer,每次调用到subscribeOn会折返调用下游的onSubscribe(), 然后切换线程做事情,切换线程后其实就是继续返回上游,并且后续操作改到subscribeOn的线程中了,直到遇到ObservableCreate.subscribeActual,内部先调用observer.onSubscribe, 再调用ObservableOnSubscribe.subscribe(CreateEmitter)
- 其他on事件发生在emitter调用on事件时,CreateEmitter.onNext调用了Observer.onNext, 每次调用到ObserveOnObserver.onNext结束,继续下一个emitter.onFunction(), 同时切换线程做事情,切换线程后ObserveOnObserver继续将数据向下流动。
参考: