Rxjava的作用

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

- 被观察者Observerable的
notifyObservers()中会依次遍历每个观察者,并调用其update()。
观察者模式使用场景

Rxjava的使用
- 创建被观察者 --3种方法
- 用
create方法。注意Subscriber就是观察者Observer
just方法
from方法
- 用
- 创建观察者

onNext()就是传统观察者模式中的onupdate()。
- 订阅

- 调用
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(): 切换主线程执行(常用)。
如何进行线程控制
subscribeOn(): 指定订阅观察者时所处线程,就是Observable.OnSubscribe被激活时的线程。observeOn(): 事件消费所在线程。
线程控制的例子


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

subscribeOn和observerOn


subscribeOn和observerOn都是通过线程池(Executor)操作线程。