RxJava只是ReactiveX(Reactive Extensions)的一种java实现, ReactiveX是一种响应式扩展框架,有很多种实现,如RxAndroid, RxJS, RxSwift, RxRuby等等。RX采用一种类似于观察者的形式来实现各种功能,跟我们一般的写代码思路差别较大。刚开始接触可能会觉得难以理解,但是一旦掌握地话就会体会到其强大之处。其原理就是创建一个Observable对象来干活,然后使用各种操作符建立起来的链式操作,就如同流水线一样把你想要处理的数据一步一步地加工成你想要的成品然后发射(emit)给Subscriber。
RxAndroid是对RxJava在Android上的扩展,如果你是做安卓开发的话,各种主线程和子线程的操作肯定会让你觉得头疼,RxAndroid可以很容易地解决你的这种困扰。
ReactiveX-GitHub
ReactiveX官网
RxAndroid
给Android 开发者的 RxJava 详解
RxJava操作符详解
create
:创建被观察者,并根据适当的时机执行onNext()
,onError()
,onComplete()
range
:根据设置的起始值n和数目m,发射一系列大于等于n的m个值,类似递增操作。
defer
:每次订阅都会得到一个最新的Observable对象,可以确保其内数据是最新的
interval
:interval所创建的Observable对象会从0开始,每隔固定的时间发射一个数字。需要在主线程中订阅。
initialDelay
:发射第一个数字延迟的时间
period
= interval
:发射数字延迟的时间
repeat
:会将一个Observable对象重复发射(执行)
timer
: 在指定时间后发射一个数字0,注意其也是运行在computation Scheduler
buffer
: 要做的事情就是将数据安装规定的大小做一下缓存,然后将缓存的数据作为一个集合发射出去。
count
:缓存数目
skip
:跳过数据的个数
timespan
:时间
flatmap
: 是一个非常用的操作符,常常用于一对多的转化。将数据根据你想要的规则进行转化后再发射出去,其原理就是将这个Observable转化为多个以原Observable发射的数据作为源数据的Observable,然后再将这多个Observable发射的数据整合发射出来,需要注意的是最后的顺序可能会交错地发射出来。
map
:类似于flatmap
,不同之处是直接进行一对一的转化,而flatmap
需要通过一些中间的Observables
来进行。
scan
:对一个序列的数据应用一个函数,并将这个函数的结果发射出去作为下个数据应用这个函数时候的第一个参数使用,有点类似于递归操作。
distinct
:所有重复的数据都会被过滤掉。
distinctUntilChanged
:过滤掉连续的重复数据。
elementAt
:返回指定位置的数据。
filter
:返回满足过滤条件的数据。
first
:返回满足条件的第一条数据。
last
:返回满足条件的最后一条数据。
skip
:将数据过滤掉前n项。
take
:只取数据的前n项。
combineLatest
:可以将2~9个Observable发射的数据组装起来然后再发射出来。
merge
:将多个Observable发射的数据整合起来发射。
startWith
:在源Observable发射的数据前面插上一些数据。