一.简单使用RxJava的三个步骤
1.创建Observable,也就是我们常说的被观察者
2.创建Observer,即观察者
3.使用subscribe()进行订阅
实例
Observable.just("Hello World").subscribe(new Consumer() { @Override public void accept(String s) throws Exception { System.out.println(s); }});
以上实例中 Observable.just() 方法创建一个被观察者, Consumer是消费者,用于接收被观察者发送的数据
subscribe的多个重载方法
1.subscribe(onNext)
2.subscribe(onNext,onError)
3.subscribe(onNext,onError,onComplete)
4.subscribe(onNext,onError,onSubscribe)
onComplete是一个Action,Action和Consumer的区别是Action没有参数;在Rxjava中被观察者,观察者,subscribe()方法三者缺一不可,只有使用了subscribe(),被观察者才会开始发送数据。
5种常用的被观察者
二.do操作符
do操作符可以给Observable的生命周期的各个阶段加上一系列的回调监听。
常见的do操作符的解释:
三.Hot Observable和Cold Observable
Hot Observable无论有没有观察者进行订阅,事件始终都会发生,当有多个订阅者时,Hot Observable与订阅者们的关系是一对多的;Cold Observable是只有观察者订阅了,才开始执行发射数据流的代码,当有多个订阅者时,cold observable与订阅者们是一对一的关系;
observable的just,create,range,fromXXX等操作符都能生成Cold Observable。
Cold Observable如何转换成Hot Observable?
1.使用publish,生成ConnectableObservable
实例
ConnectableObservable是线程安全的
2.使用Subject/Processor
实例
上述实例中,Subject既是Observable,又是Observer;Subscject作为观察者,可以订阅目标Cold Observable,是对方开始发送事件。同时它又可以作为Observable转发或者发送新的事件,让cold Observable借助Subject转换为Hot Observable;Subject并不是线程安全的;
Hot Observable如何转换成Cold Observable
1.使用ConnectableObservable的refCount操作符
实例:
如果不是所有的订阅者/观察者都取消了订阅,而只是部分取消,则部分的订阅者观察者重新开始订阅时,不会从头开始数据流
Observeble的share操作符封装了publish.refCount()调用,原来同上。
四,另外4种被观察者Flowable,Single,Completable,Maybe
1.Flowable
1.RxJava2.x中,Observable不再支持被压,而改由Flowable来支持非阻塞式的背压,并且Flowable的所有操作符都强制支持背压。
2.Flowable和Observable使用上的区别:
1.Observable一般处理最大不超过1000条的数据,而Flowable可以处理以某种方式产生的超过10KB的元素
2.Obserbable一般处理GUI鼠标事件,基本不会背压。而Flowable一遍用于文件的读取与分析,读取数据库记录,创建网络I/O流
3.Observable处理同步流,Flowable创建一个响应式非阻塞接口
2.Single
1.Single只有onSuccess和onError事件,onSuccess能且只能发送一个数据
2.Single可以通过toXXX方法转换成Observable,Flowable,Completable,Maybe
3.Completable
1. Completable只有onComplete和onError事件,所以Completable在创建后,不会发射任何数据,并且其所有的操作符也很少
2.我们可以通过fromXXX操作符来创建一个Completable
Completable.fromAction(new Action() { @Override public void run() throws Exception { System.out.println("Hello world"); }});
3.Completable经常结合andThen操作符使用
4.MayBe
1.MayBe可以看成是Single和Completable的结合
2.MayBe也只能发射0或者一个数据,即使发射多个数据,后面发射的数据也不会再处理
五,Subject和Processor
Subject是一种特殊的存在,既是Observable,又是Observer,官网称可以将Subject看做是一个桥梁或者代理
Processor和Subject的作用相同,Processor能够支持背压,这是Processor和Subject的最大区别