RxJava 速查

一、RxJava、RxAndroid


Rxjava

RxJava: Reactive Extensions for the JVM

异步、观察者模式扩展、函数式编程

RxAndroid

RxAndroid: Reactive Extensions for Android

RxAndroid是RxJava的一个针对Android平台的扩展,主要用于 Android 开发

// 添加依赖
implementation 'io.reactivex.rxjava2:rxandroid:2.1.1'
// 
// Because RxAndroid releases are few and far between, it is recommended you also
// explicitly depend on RxJava's latest version for bug fixes and new features.
// (see https://github.com/ReactiveX/RxJava/releases for latest 2.x.x version)
implementation 'io.reactivex.rxjava2:rxjava:2.x.x'

二、角色


角色作用
Observable 被观察者产生、发送事件
Observer 观察者接收、处理事件
Event 事件消息载体
Subscribe 订阅使被观察者和观察者建立关联

三、事件


事件含义说明
onSubscribe订阅事件观察者与被观察者成功建立连接时发送
onNext常规事件随便发送
onError异常事件事件序列中最后一个事件,之后不会发送、接收到其他事件
onComplete结束事件事件序列中最后一个事件,之后不会发送、接收到其他事件

四、操作符


创建操作符作用
create()创建一个被观察者
just()创建一个被观察者,并发送事件,发送的事件不可以超过10个以上
fromArray()创建一个被观察者,和 just() 类似,但可以传入多于10个的变量,并且可以传入一个数组
fromCallable()创建一个被观察者,只会返回一个结果值,这个结果值就是发给观察者
fromFuture()创建一个被观察者,Future 的作用是增加了 cancel() 等方法操作 Callable,它可以通过 get() 方法来获取 Callable 返回的值。
fromIterable()创建一个被观察者,直接发送一个 List 集合数据给观察者
defer()创建一个被观察者,直到被观察者被订阅后才会创建被观察者
timer()创建一个被观察者,当到指定时间后就会发送一个 0L 的值给观察者
interval()创建一个被观察者,每隔一段时间就会发送一个事件,这个事件是从0开始,不断增1的数字
intervalRange()创建一个被观察者,可以指定发送事件的开始值和数量,其他与 interval() 的功能一样
range()创建一个被观察者,同时发送一定范围的事件序列
rangeLong()创建一个被观察者,作用与 range() 一样,只是数据类型为 Long
empty()创建一个被观察者,直接发送 onComplete() 事件
never()创建一个被观察者,不发送任何事件
error()创建一个被观察者,发送 onError() 事件
转换操作符用途
map()可以将被观察者发送的数据类型转变成其他的类型
flatMap()可以将事件序列中的元素进行整合加工,返回一个新的被观察者
concatMap()和 flatMap() 基本上是一样的,只不过 concatMap() 转发出来的事件是有序的,而 flatMap() 是无序的
buffer()从需要发送的事件当中获取一定数量的事件,并将这些事件放到缓冲区当中一并发出
groupBy()将发送的数据进行分组,每个分组都会返回一个被观察者
scan()将数据以一定的逻辑聚合起来
window()发送指定数量的事件时,就将这些事件分为一组
组合操作符用途
concat()可以将多个观察者组合在一起,然后按照之前发送顺序发送事件。concat() 最多只可以发送4个观察者
concatArray()与 concat() 作用一样,不过 concatArray() 可以发送多于 4 个被观察者
concatArrayDelayError()将onError()事件延迟到所有被观察者都发送完事件后再执行
merge()和concat() 作用基本一样,只是concat() 是串行发送事件,而 merge() 并行发送事件
mergeArray()与 merge() 作用一样,不过 concatArray() 可以发送多于 4 个被观察者
mergeArrayDelayError()将onError()事件延迟到所有被观察者都发送完事件后再执行
zip()会将多个被观察者合并,根据各个被观察者发送事件的顺序一个个结合起来,最终发送的事件数量会与源 Observable 中最少事件的数量一样
combineLatest()作用与 zip() 类似,只是一个 Observable 发送事件,这个事件就会和其他 Observable 最近发送的事件结合起来发送
combineLatestDelayError()将onError()事件延迟到所有被观察者都发送完事件后再执行
reduce()与 scan() 操作符的作用也是将发送数据以一定逻辑聚合起来,这两个的区别在于 scan() 每处理一次数据就会将事件发送给观察者,而 reduce() 会将所有数据聚合在一起才会发送事件给观察者
collect()将数据收集到数据结构当中
startWith()在发送事件之前追加一个事件
startWithArray()在发送事件之前追加多个事件
count()返回被观察者发送事件的数量
功能操作符用途
delay()延迟发送事件
doOnEach()Observable 每发送一件事件之前都会先回调这个方法
doOnNext()Observable 每发送 onNext() 之前都会先回调这个方法
doAfterNext()Observable 每发送 onNext() 之后都会回调这个方法
doOnComplete()Observable 每发送 onComplete() 之前都会回调这个方法
doOnError()Observable 每发送 onError() 之前都会回调这个方法
doOnSubscribe()Observable 每发送 onSubscribe() 之前都会回调这个方法
doOnDispose()当调用 Disposable 的 dispose() 之后回调该方法
doOnLifecycle()在回调 onSubscribe 之前回调该方法的第一个参数的回调方法,可以使用该回调方法决定是否取消订阅
doOnTerminate()onError 或者 onComplete 发送之前回调
doAfterTerminate()onError 或者 onComplete 发送之后回调
doFinally()在所有事件发送完毕之后回调该方法
onErrorReturn()当接受到一个 onError() 事件之后回调,返回的值会回调 onNext() 方法,并正常结束该事件序列
onErrorResumeNext()当接收到 onError() 事件时,返回一个新的 Observable,并正常结束事件序列
onExceptionResumeNext()与 onErrorResumeNext() 作用基本一致,但是这个方法只能捕捉 Exception
retry()如果出现错误事件,则会重新发送所有事件序列
retryUntil()出现错误事件之后,可以通过此方法判断是否继续发送事件
retryWhen()当被观察者接收到异常或者错误事件时会回调该方法,这个方法会返回一个新的被观察者。如果返回的被观察者发送 Error 事件则之前的被观察者不会继续发送事件,如果发送正常事件则之前的被观察者会继续不断重试发送事件
repeat()重复发送被观察者的事件
repeatWhen()这个方法可以会返回一个新的被观察者设定一定逻辑来决定是否重复发送事件
subscribeOn()指定被观察者的线程,要注意的时,如果多次调用此方法,只有第一次有效
observeOn()指定观察者的线程,每指定一次就会生效一次
过滤操作符用途
filter()通过一定逻辑来过滤被观察者发送的事件,如果返回 true 则会发送事件,否则不会发送
ofType()可以过滤不符合该类型事件
skip()跳过正序某些事件,count 代表跳过事件的数量
skipLast()跳过正序的后面的事件
distinct()过滤事件序列中的重复事件
distinctUntilChanged()过滤掉连续重复的事件
take()控制观察者接收的事件的数量
takeLast()控制观察者只能接受事件序列的后面几个事件
debounce()如果两件事件发送的时间间隔小于设定的时间间隔则前一件事件就不会发送给观察者
throttleWithTimeout()同上
firstElement()取事件序列的第一个元素
lastElement()取事件序列的最后一个元素
elementAt()可以指定取出事件序列中事件,但是输入的 index 超出事件序列的总数的话就不会出现任何结果
elementAtOrError()上述情况index超出时,你想发出异常信息的话就用 elementAtOrError()
条件操作符用途
all()判断事件序列是否全部满足某个事件,如果都满足则返回 true,反之则返回 false
takeWhile()可以设置条件,当某个数据满足条件时就会发送该数据,反之则不发送
skipWhile()可以设置条件,当某个数据满足条件时不发送该数据,反之则发送
takeUntil()可以设置条件,当事件满足此条件时,下一次的事件就不会被发送了
skipUntil()当 skipUntil() 中的 Observable 发送事件了,原来的 Observable 才会发送事件给观察者
sequenceEqual()判断两个 Observable 发送的事件是否相同
contains()判断事件序列中是否含有某个元素,如果有则返回 true,如果没有则返回 false
isEmpty()判断事件序列是否为空
amb()amb() 要传入一个 Observable 集合,但是只会发送最先发送事件的 Observable 中的事件,其余 Observable 将会被丢弃
defaultIfEmpty()如果观察者只发送一个 onComplete() 事件,则可以利用这个方法发送一个值

五、调度器


调度器作用
Schedulers.io()适用于 IO 密集型任务
Scheduler.computation()适用于计算密集型任务
Scheduler.trampoline()在某个调用 schedule 的线程执行
Scheduler.newThread()每个 Worker 对应一个新线程
Schedule.single()所有 Worker 使用同一个线程执行任务
Scheduler.from(Executor)使用 Executor 作为任务执行的线程
AndroidSchedulers.mainThread()主线程

参考:RxJava2 只看这一篇文章就够了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值