RxJava 2(一)基本使用

RxJava是ReactiveX在java平台上的实现。ReactiveX: An API for asynchronous programming with observable streams。stream可以是数据,也可以是事件。

本文基于RxJava 2.1.2描述基本使用,熟悉基本概念。在后面的文章中,名词会有大小写区分,observable表示可供订阅的意思,Observable表示RxJava中的io.reactivex.Observable类。同理observer表示订阅者,Observer表示RxJava中的io.reactivex.Observer接口。在链式调用中,操作符前面的称为上游,后面的称为下游。

导入依赖

compile 'io.reactivex.rxjava2:rxjava:2.1.2'
compile 'io.reactivex.rxjava2:rxandroid:2.0.1'

使用方法

RxJava的基本使用方式为

  1. 创建observable stream,即封装有数据或者事件的observable
  2. 用操作符组合或者变换stream
  3. 订阅observable stream并做出响应
  4. 必要时取消订阅

对应到代码中,大约会是这样

        Disposable disposable = Observable.just("a", "b", "c")          // 1.创建observable stream
                .take(1)                        // 2.变换stream
                .subscribe(new Consumer<String>() {  // 3.建立订阅
                               @Override
                               public void accept(String s) throws Exception {
                                   System.out.println(s);
                               }
                           });
        disposable.dispose();   // 4.取消订阅

这样就实现了一个最基本的RxJava例子,我们对RxJava的实践最终都是和上面的一致。
下面继续了解具体的细节。

observable的创建

在RxJava中,有如下类可以作为observable,分别是Observable, Flowable, Maybe, Single, Completable,区别主要在于

类型 描述
Observable 发射0到多个数据,结束有sucess或者error事件
Flowable 发射0到多个数据,结束有sucess或者error事件。支持背压,即允许控制source发射数据速度
Maybe 发射0或者1条数据,或者error事件
Single 发射1条数据或者error事件
Completable 不发射数据,结束有success或者error事件

各observable的创建方法基本一致,以Observable为例,它提供了最基本的create方法,同时提供了如just, fromArray, fromIterator, fromCallable, fromFuture, interval等方式快捷创建observable。

        Observable o = Observable.create(new ObservableOnSubscribe() {
            @Override
            public void subscribe(@NonNull ObservableEmitter e) throws Exception {
                e.onNext("hello");
                e.onComplete();
            }
        });

stream变换

Rxjava提供了一系列的操作符用于变换stream,操作符返回的同样是observable,方便连续变换。
以下随便列出4个操作符

操作符 描述
observeOn 指定下游observer执行的线程
suscribleOn 指定上游observable发射消息所在的线程
cache 缓存上游发送的所有事件重发给下游订阅者
flatmap 上游发射的数据经Function处理后再发射到下游

建立订阅关系

订阅关系的建立主要是调用Observable的subscribe系列方法,最终都会调用到如下方法

public final void subscribe(Observer<? super T> observer)

上面的方法会建立最终订阅关系,不过由于需要管理订阅关系,所以一般不直接调用它,而是通过调用其它的subscribe方法间接调用到这里。

取消订阅

订阅后会返回Disposable对象,可以在必要时候手动调用Disposable.dispose()方法来切换订阅关系,比如android中onDestroy时需要取消网络请求。

扫描二维码关注公众号,回复: 831312 查看本文章

CompositeDisposable可以看成是Disposable的集合,当有多个订阅关系即多个Disposable时,可以通过CompositeDisposable.add(disposable)放到一起,在必要的时候调用compositeDisposable.dispose()方法同时切断多个订阅关系。

猜你喜欢

转载自blog.csdn.net/w_xue/article/details/77849687