赞
踩
RxJava是是一个基于事件流处理来实现异步操作的库。对于需要切换线程来异步处理的场景,能够简化代码编写,提高代码可读性。官网地址: ReactiveX
被观察者负责生产事件,观察者负责处理事件,一旦观察者 订阅了 被观察者,就会触发被观察者发送事件流。这里的“事件”是一个抽象概念,它的载体是一个数据结构(例如String/Object/自定义对象等),传递的实际上是数据,只是在观察者模式中它们的角色是“事件”。事件流对应的,是要传递的数据流。
RxJava使用基于事件流的链式调用,事件“从上游流向下游”,中间可以多次做各种处理和变换,最终流到最下游被处理掉。最初的被观察者是事件流的源头,而观察者位于事件流的最下游。
大致可分为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) {
- //.....处理数据.....
- }
- /**
- *
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。