前言
一直想弄明白RxJava到底是什么,为了加深对Rxjava的理解,特地写博客,为了后期的应用和学习,常言道,好记性不如烂笔头,借鉴学习大牛的博客,努力通俗易懂。
首先推荐一下:给Android开发者的Rxjava详解
感谢扔物线的分享
1.RxJava是什么?
它是基于观察者模式和异步实现的,是扩展的观察者模式。它具体好在哪呢?就是随着程序的逻辑变得越来越复杂,它依然能够保持简洁;RxJava的实现是通过从上而下的链式调用,没有任何嵌套,逻辑的简洁,不代表代码量的减少。
RxJava刚才说了,是一种扩展的观察者模式,它有四个基本的概念:
Observable(可观察者,即被观察者)、Observer(观察者)、subsribe(订阅)、事件。这个类似于android开发中比较典型的例子,点击监听器OnClickListener
其中,view(button)是被观察者,OnClickListener是观察者,二者通过setOnClickListener()方法达成订阅关系,而被调用的OnClickListenerde的方法onClick,就是事件。
button相当于observable,onClickListener相当于observer,比较类似,但是与传统的观察者模式有所不同的是,除了普通事件onNext()(相当于onclick()/onEvent())之外,还定义的特殊的事件:onCompleted()和onError().
onCompleted():事件队列完结。RxJava不仅把每个事件单独处理,还会把它们看做一个队列。RxJava规定,当不会再有新的onNext()发出时,需要触发onCompleted()方法作为标志。
onError():事件队列异常。在事件处理过程中出异常时,onError()会被触发,同时队列自动终止,不允许再有事件发出。
注意:在一个正确运行的事件序列中,onCompleted()和onError()有且只有一个,并且是时间序列中的最后一个。需要注意的的是,onCompleted()和onError()二者也是互斥的,即在队列中调用了其中一个,就不应该再调用另一个。
2.基本实现
基于以上的概念,RxJava的基本实现主要有三点:
1)创建Observer
Observer 即观察者,它决定事件触发的时候将有怎样的行为。 RxJava 中的 Observer 接口的实现方式:
Observer<String> observer = new Observer<String>() {
@Override
public void onNext(String s) {
Log.d(tag, "Item: " + s);
}
@Override
public void onCompleted() {
Log.d(tag, "Completed!");
}
@Override
public void onError(Throwable e) {
Log.d(tag, "Error!");
}};
除了 Observer 接口之外,RxJava 还内置了一个实现了 Observer 的抽象类:Subscriber。 Subscriber 对 Observer 接口进行了一些扩展,但他们的基本使用方式是完全一样的:
Subscriber<String> subscriber = new Subscriber<String>() {
@Override
public void onNext(String s) {
Log.d(tag, "Item: " + s);
}
@Override
public void onCompleted() {
Log.d(tag, "Completed!");
}
@Override
public void onError(Throwable e) {
Log.d(tag, "Error!");
}};
2)仿写的博客地址