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

【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();

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

三、资源

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值