Android从零开始学习Rxjava2(一)

前言

越来越多的开源项目使用了rxjava2,最近才开始认真的沉下来学习rxjava2,想写个笔记记录和整理下自己所学,顺便可以加深下印象。


学习rxjava2,首先要大概了解下它能做什么,为什么选择使用它?
翻看git上rxjava说明,a library for composing asynchronous and event-based programs by using observable sequences.(一个库,用于通过使用可观察序列来编写异步和基于事件的程序)。这句话重点就是rxjava是编写异步的库。那我们使用异步已经有AsyncTask和Handler,那为什么还要使用rxjava呢?那是因为rxjava来实现异步更简洁、更容易、代码逻辑更清晰,而且还有很多和android相关的库,可以很方便的在其他线程和主线程中来回切换。

首先我们来简单说下rxjava的一些基本内容。rxjava是通过扩展的观察者模式来实现的。
作为观察者模式,它有几个部分Observables(被观察者)、Observable(观察者)、subscribe(订阅)和event(事件)。Observable(被观察者) subscribe(订阅) Observer (观察者)实现订阅关系,Observable Emitter(发射)事件由已经订阅的Observer接收并处理。

看下简单的图解
在这里插入图片描述

空说可能不好理解,我们来写一下代码实现下。
android开发者使用rxjava2,应该在gradle中引用两个库文件,如下

	// RxJava2 Dependencies
    implementation 'io.reactivex.rxjava2:rxjava:2.2.2'
    implementation 'io.reactivex.rxjava2:rxandroid:2.1.0'

1.创建一个Observable(被观察者)

private Observable<String> getObservable() {
        return Observable.create(new ObservableOnSubscribe<String>() {
            @Override
            public void subscribe(ObservableEmitter<String> emitter) throws Exception {
                emitter.onNext("1");
                emitter.onNext("2");
                emitter.onNext("3");
                emitter.onComplete();
            }
        });
    }

2.创建一个Observer(观察者)

private Observer<String> getObserver() {
        return new Observer<String>() {
            @Override
            public void onSubscribe(Disposable d) {
            }
            @Override
            public void onNext(String value) {
                Log.d(TAG, " onNext : value : " + value);
            }
            @Override
            public void onError(Throwable e) {
                Log.d(TAG, " onError : " + e.getMessage());
            }
            @Override
            public void onComplete() {
                Log.d(TAG, " onComplete");
            }
        };
    }

3.Observable(被观察者) subscribe(订阅) Observer (观察者)实现订阅关系

getObservable()
                // Run on a background thread
                .subscribeOn(Schedulers.io())
                // Be notified on the main thread
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(getObserver());

在上面的例子中,上游Observable Emitter(发射)了四个事件

emitter.onNext("1");
emitter.onNext("2");
emitter.onNext("3");
emitter.onComplete();

下游观察者依次打印结果如下

onNext : value : 1
onNext : value : 2
onNext : value : 3
onComplete

示例图
在这里插入图片描述

我们可以注意到Observer中有四个方法onSubscribe、onNext、onError和onComplete,其实这几个方法被调用的时机可以通过他们的名称就有所了解。onSubscribe被订阅的时候触发,onNext、onError和onComplete都是Observable Emitter主动发射后接收触发。

对于Observer (观察者)的几个方法,有以下几点注意即可:

onNext():可以接收多次 onNext() 事件,当onCompleted或者onError后,emitter再次发射新的 onNext() 事件不再被接收到。
onCompleted(): 事件队列完结。RxJava 不仅把每个事件单独处理,还会把它们看做一个队列。RxJava 规定,当不会再有新的 onNext() 发出时,需要触发 onCompleted() 方法作为标志。
onError(): 事件队列异常。在事件处理过程中出异常时,onError() 会被触发,同时队列自动终止,不允许再有事件发出。

在一个正确运行的事件序列中, onCompleted() 和 onError() 有且只有一个,并且是事件序列中的最后一个。需要注意的是,onCompleted() 和 onError() 二者也是互斥的,即在队列中调用了其中一个,就不应该再调用另一个。


参考资料,参考但不局限以下链接
https://gank.io/post/560e15be2dca930e00da1083
https://blog.csdn.net/qq_29366131/article/details/75529902

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值