前言:
RxJava等编程思想正在Android开发者中变的越来越流行。唯一的问题就是上手不容易,尤其是大部分人之前都是使用命令式编程语言。
首先要先理清这么一个问题:Rxjava和我们平时写的程序有什么不同。相信稍微对Rxjava有点认知的朋友都会深深感受到用这种方式写的程序和我们一般写的程序有很明显的不同。我们一般写的程序 统称为命令式程序,是以流程为核心的,每一行代码实际上都是机器实际上要执行的指令。而Rxjava这样的编程风格,称为函数响应式编程。函数响应式编程是以数据流为核心,处理数据的输入,处理以及输出的。这种思路写出来的代码就会跟机器实际执行的指令大相径庭。所以对于已经习惯命令式编程的我们来说,刚开始接触Rxjava的时候必然会很不适应,而且也不太符合我们平时的思维习惯。但是久而久之你会发现这个框架的精髓,尤其是你运用到大项目中的时候,简直爱不释手,随着程序逻辑变得越来越复杂,它依然能够保持代码简洁。
1.RxJava是什么:
要知道RxJava是什么,那么你应该先去了解一下Rx。Rx的全称是Reactive Extensions,直译过来就是响应式扩展。Rx基于观察者模式,他是一种编程模型,目标是提供一致的编程接口,帮助开发者更方便的处理异步数据流。ReactiveX.io给的定义是,Rx是一个使用可观察数据流进行异步编程的编程接口,ReactiveX结合了观察者模式、迭代器模式和函数式编程的精华。Rx已经渗透到了各个语言中,有了Rx所以才有了 RxJava,Rx.NET、RxJS、RxSwift、RxPHP等等
2使用rxjava,gradle依赖:
compile'io.reactivex.rxjava2:rxandroid:2.0.1'
compile'io.reactivex.rxjava2:rxjava:2.0.7'
onNext:你可以发送无数个onNext,发送的每个onNext接受者都会接收到.
onError:当发送了onError事件之后,发送者onError之后的事件依旧会继续发送,但是接收者当接收到onError之后就会停止接收事件了.
onComplete:当发送了onComplete事件之后,发送者的onComplete之后的事件依旧会继续发送,但是接收者接收到onComplete之后就停止接收事件了.
onError事件和onComplete事件是互斥的,但是这并不代表你配置了多个onError和onComplete一定会崩溃,多个onComplete是可以正常运行的,但是只会接收到第一个,之后的就不会再接收到了,多个onError时,只会接收到第一个,第二个会直接造成程序崩溃.
create() 方法是 RxJava 最基本的创造事件序列的方法。基于这个方法, RxJava 还提供了一些方法用来快捷创建事件队列,例如:
just(T...): 将传入的参数依次发送出来。
from(T[]) / from(Iterable) : 将传入的数组或 Iterable 拆分成具体对象后,依次发送出来。
3.线程切换
默认情况下,发送者和接收者都运行在主线程,但是这显然是不符合实际需求的,我们在日常使用中,通常用的最多的就是在子线程进行各种耗时操作,然后发送到主线程进行,
- Schedulers.io() io操作的线程, 通常io操作,如文件读写.
- Schedulers.computation() 计算线程,适合高计算,数据量高的操作.
- Schedulers.newThread() 创建一个新线程,适合子线程操作.
- AndroidSchedulers.mainThread() Android的主线程,主线程
4.常用操作符
操作符就是为了解决对Observable对象的 变换(关键词) 的问题,操作符用于在Observable和最终的Observer之间修改Observable发出的事件。
map
map的作用简单来说就是我输入一个数据类型的对象,转换得到另一个我想要的数据类型的对象,例如下边,传入integer,得到String。
map操作符对原始的Observable发送的每一项数据应用一个你选择的函数,然后返回一个发射这些结果的Observable
flatMap
flatMap 返回的是一个全新的Observable 对象
filter
这个操作符可以作为数据筛选器,帮你过滤不想要的数据
take
这个操作符可以作为数据筛选器,帮你过滤不想要的数据
doOnNext
此操作符可以在消费者也就是观察者 接收到数据之前做事。