Rxjava异步框架源码解析

375 阅读2分钟

Rxjava的作用

观察者模式

  • 多对一,多个观察者,一个被观察者,观察者对于被观察者有高度的数据敏感性,可以做出相应变化。

UML类图

  • 被观察者Observerable的notifyObservers()中会依次遍历每个观察者,并调用其update()

观察者模式使用场景

Rxjava的使用

  1. 创建被观察者 --3种方法
    • create方法。注意Subscriber就是观察者Observer
    • just方法
    • from方法
  2. 创建观察者
  • onNext()就是传统观察者模式中的onupdate()
  1. 订阅
  • 调用subscribe方法后默认会触发Observable.OnSubscribe中的call方法,完成事件消费。

Rxjava源码

--进入类Subscriber

  • SubscriptionList保存了该观察者(Subscriber/Observer)的所有订阅事件,取消订阅时事件也会在List中被删除。 --进入observable.subscribe(observer)
  • 内部将Subscriber包装成SafeSubscriber,并实现了onCompleted(),onError(),onNext()方法。
  • 最终调用call(subscriber)完成订阅。

Rxjava操作符

map --映射/事件转换

  • Func1<String, Bitmap>是接口,可以把String类型的图片路径转换成Bitmap类型。map操作符会创建一个新的Observable,然后再链式调用subscribe

flatMap

  • Func1<String, Observable>将String类型转换为Observable类型。

Rxjava线程控制

Schedulers

  • Schedulers.immediate(): 不切换线程,在当前线程下执行。
  • Schedulers.newThread(): 总是启用新线程执行操作。
  • Schedulers.io(): 进行I/O操作,如读写文件,网络信息交互(常用)。
  • Schedulers.computation(): 进行CPU密集型计算。
  • AndroidSchedulers.mainThread(): 切换主线程执行(常用)。

如何进行线程控制

  1. subscribeOn(): 指定订阅观察者时所处线程,就是Observable.OnSubscribe被激活时的线程。
  2. observeOn(): 事件消费所在线程。

线程控制的例子

  • observeOn(..)指定的是之后的操作所在的线程,可多次调用。
  • subscribeOn(..)可在observeOn(..)前/后调用,只能调用1次。

subscribeOn方法

subscribeOnobserverOn

  • subscribeOnobserverOn都是通过线程池(Executor)操作线程。