##.简介
RxJava是是一个基于事件流处理来实现异步操作的库。对于需要切换线程来异步处理的场景,能够简化代码编写,提高代码可读性。官网地址: ReactiveX
一、使用流程概括和示例
1.它是按照观察者模式来设计的
被观察者负责生产事件,观察者负责处理事件,一旦观察者 订阅了 被观察者,就会触发被观察者发送事件流。这里的“事件”是一个抽象概念,它的载体是一个数据结构(例如String/Object/自定义对象等),传递的实际上是数据,只是在观察者模式中它们的角色是“事件”。事件流对应的,是要传递的数据流。
RxJava使用基于事件流的链式调用,事件“从上游流向下游”,中间可以多次做各种处理和变换,最终流到最下游被处理掉。最初的被观察者是事件流的源头,而观察者位于事件流的最下游。
2.使用流程和示例
大致可分为3步:1)创建被观察者,编写事件生产和发送逻辑;通过事件发射器 FlowableEmitter的onNext()/onComplete()/onError()等来传递事件。2)创建观察者,编写事件处理逻辑;通过自己的 onNext()/onComplete()/onError()等来接受事件并处理。注意:上游事件发送正常结束时 onComplete()被调用, onError()在出错时被调用,二者出现时都意味着事件流处理结束,但二者只会有一个被调用到。3)观察者 订阅 被观察者,触发 被观察者生产和发送时间,然后观察者接收事件并处理。
代码示例和注释讲解:
/**
* 1.创建被观察者
* 有多种创建方式,这是其中较常见一种,通过Create()方法创建
* 第二个参数是背压策略
*/
Flowable<String> flowable = Flowable.create(new FlowableOnSubscribe<String>() {
/**
* 被订阅后,会触发调用该方法
* @param emitter 事件发射器,可通过它将事件传递给观察者
* @throws Throwable
*/
@Override
public void subscribe(@NonNull FlowableEmitter<String> emitter) throws Throwable {
//通过onNext()方法来传递事件(数据)
emitter.onNext("aaa");
emitter.onNext("bbb");
emitter.onNext("ccc”);
//调用onComplete(),意味着事件流发送已结束
//后面再调用onNext()也不会再将事件发送出去
emitter.onComplete();
}
}, BackpressureStrategy.ERROR);
/**
* 2.创建观察者
*/
FlowableSubscriber<String> flowableSubscriber = new FlowableSubscriber<String>() {
/**
* 一旦订阅,会首先调用该方法
* 传入的参数s是Subscription类型,对应的是"订阅"这个抽象概念
* 通过调用Subscription.cancel()可以取消订阅,停止事件流发送和接收
* @param s
*/
@Override
public void onSubscribe(@NonNull Subscription s) {
}
/**
* 通过该方法将数据传递过来
* @param s
*/
@Override
public void onNext(String s) {
//.....处理数据.....
}
/**
*