Skip to content

参考资料

https://www.bilibili.com/read/cv15131722/

subscribeOn

observeOn会决定观察者执行事件的线程 subscribeOn是决定被观察者订阅事件所在的线程 在Scheduler类中的Runable执行线程切换,线程切换的常见方式有:

  1. handler切换线程
  2. ExcutorService线程池
  3. Thread子线程

在Scheduler类中的Runable执行线程切换,而具体切换到哪一个线程需要通过Worker指定,而具体的Worker由Scheduler创建,因此其实就是由Scheduler决定SubscribeOn中事件实际运行的在哪一个线程。 29-subscribeOn操作符实现(这一集不是很懂)image.png

observeOn

observeOn操作符用来决定下游观察者的事件执行所在的线程。 主要是通过一个队列的数据结构,在观察者收到事件时不立马发射事件,而是先存储在一个队列中,然后将事件在Runable的run方法中去处理,将队列中的事件取出来,再由下游的观察者调用onNext方法,真正的发射事件。 而run方法具体是在子线程还是主线程就有我们的Schedule构造注入,然后由Woker真正去指定具体的线程 因此无论是subscribeOn还是observeOn都是将需要处理的事件包裹在Runable的run方法中去执行。 image.png

整体架构

image.png