【RxJava 实践系列】(一)基础知识

来源:互联网 发布:寺库网是正品吗 知乎 编辑:程序博客网 时间:2024/06/05 20:01

【RxJava 实践系列】(一)基础知识
【RxJava 实践系列】(二)创建观察者与被观察者
【RxJava 实践系列】(三)线程控制 — Scheduler

前言

学习RxJava,从入门都放弃已经好几次了。首先由于RxJava上手的确有点小难度;其次她颠覆的我们传统的编程思想,她把编程像糖葫芦一样串起来。在没有一定深度了解的情况下你很难去接受她,但是一旦你弄明白了,你就会发现RxJava好像你的小媳妇,你就是想一层一层揭开她的衣服去了解她。

本文是对RxJava各种操作符在Android平台上的一个简单实践,方便以后查阅。

RxJava是基于观察者模式,所以学习RxJava你最好对观察者模式有一定的了解。

一、基础

1、什么是RxJava

RxJava 在 GitHub 主页上的自我介绍是 “a library for composing asynchronous and event-based programs using observable sequences for the Java VM”(一个在 Java VM 上使用可观测的序列来组成异步的、基于事件的程序的库)
如果非要用一个词来概括RxJava,那可以概括为“异步”,它就是一个实现异步操作的库;然而它远远比这个定义要强大。
RxJava 的优势也是简洁,但它的简洁的与众不同之处在于,随着程序逻辑变得越来越复杂,它依然能够保持简洁。

2、在RxJava中主要有4个角色:

  • Observable (可观察者,即被观察者)
  • Observer (观察者)
  • subscribe (订阅)
  • Event(事件)

Observable 和 Observer 通过 subscribe() 方法实现订阅关系,从而 Observable 可以在需要的时候发出事件来通知 Observer。

二、基本实现

RxJava 的基本实现三部曲:

1. 创建观察者Observer

    Observer<String> observer = new Observer<String>() {        @Override        public void onCompleted() {            //执行结果            Log.v(TAG, "onCompleted ");        }        @Override        public void onError(Throwable e) {            //执行错误            Log.v(TAG, "onError: "+e);        }        @Override        public void onNext(String str) {            //接受数据            Log.v(TAG, "onNext: "+str);        }    };

onNext():接收发送的数据;onCompleted()、onError()都没执行时onNext()可以一直接受发送的数据
onCompleted():RxJava所有事件完成时候,可以调用onCompleted()方法作为标示;
onError():当事件处理出现异常时框架自动触发onError()方法,当然你也可以根据你的逻辑手动触发;
onCompleted(),onError() 都表示执行完成,有且只有一种结果,后调用的不会执行。

2. 创建 Observable

Observable无法直接new出来,这里我们通过Observable.create()方法创建一个Observable。

Observable<String> observable = Observable.create(new Observable.OnSubscribe<String>() {    @Override    public void call(Subscriber<? super String> subscriber) {        //发送数据        subscriber.onNext("test data1");        subscriber.onNext("test data2");        subscriber.onNext("test data3");        //发送完成        subscriber.onCompleted();    }});

除了create(),just()、from()等等同样可以创建Observable,后续文字会详细讲解。

3. Subscribe (订阅)

observable.subscribe(observer);

4、组合写法

上述基本实现可以换一种写法,来来来把他们撸成串。这种写法等价于上面分开的写法。

        Observable.create(new Observable.OnSubscribe<String>() {            @Override            public void call(Subscriber<? super String> subscriber) {                //发送数据                subscriber.onNext("test data1");                subscriber.onNext("test data2");                subscriber.onNext("test data3");                //发送完成                subscriber.onError(null);                subscriber.onCompleted();            }        }).subscribe(new Observer<String>() {            @Override            public void onCompleted() {                //执行结果                Log.v(TAG, "onCompleted ");            }            @Override            public void onError(Throwable e) {                //执行错误                Log.v(TAG, "onError: "+e);            }            @Override            public void onNext(String str) {                //接受数据                Log.v(TAG, "onNext: "+str);            }        });

程序调用流程

// onNext("test data1");// onNext("test data2");// onNext("test data3");// onCompleted();

图解流程
图片来源
图片来源网络

三、资源

  • ReactiveX/RxJava文档中文版 官方翻译
  • 给 Android 开发者的 RxJava 详解 作者:扔物线
  • Awesome-RxJava github一网友对RxJava学习资源的整理
1 0
原创粉丝点击