添加依赖
implementation "io.reactivex.rxjava3:rxjava:3.1.5"
implementation 'io.reactivex.rxjava3:rxandroid:3.0.2'
关于RxJava
RxJava的核心是异步数据流和响应式编程
RxJava适用场景
网络请求。数据库读写,文件读写,定时任务等各种耗时操作都需要通过异步来完成的操作都可以使用RxJava
RxJava几个重要概念
观察者:
Observer,观察事件变化并处理的主要角色。消费者(Consumer)也可以理解成一种特殊的观察者
被观察者:
触发事件并决定什么时候发送事件的主要角色(异常和完成也是一种事件)
Observable. Flowable .Single .Completable Maybe都是被观察者
Flowable是支持背压的一种观察者
Single.Completable.Maye 是简化版的Observable
几种被观察者通过toObservable/toFlowable/toSingle/toCompletable/toMaybe相互转换
订阅(subscribe):
观察者和被观察者建立关联的操作
强大的操作符群
创建操作符
create() 创建一个被观察者
just() 创建一个被观察者,并发送事件,发送的事件不可以超过10个以上
Form 操作符
fromArray()
fromCallable()
fromFuture()
fromIterable()
defer() 这个方法的作用就是直到被观察者被订阅后才会创建被观察者
timer()当到指定事件后就会发送一个OL的值给观察者
interval() 每隔一段时间就会发送一个事件,这个事件是从0开始,不断增1的数字
intervalRange() 可以指定发送事件的开始值和数量,其他与interval()的功能
range()同时发送一定范围的时间序列
rangeLong()作用与range()一样,只是数据类型为long
empty()&never()&error()
empty() :直接发送onConplete事件
never()不发送任何事件
error()发送onError()事件
转换操作符
map()map可以将被观察者发送的数据类型转换成其他的类型
flatMap() 这个方法可以将时间序列中的元素进行整合加工,返回一个新的被观察者
concatMap() concatMap()和flatMap()基本上是一样的,只不过concatMap()转发出来的事件是有序的,而flatMap()是无序的
buffer()从需要发送的事件当中获取一定数量的事件,并将这些事件放到缓冲区当中一并发出
groupBy()将发送的数据进行分组,每个分组都会返回一个被观察者
scan() 将数据以一定的逻辑聚合起来
window()发送指定数量的事件时,就将这些事件分为一组。window 中的count的参数就是代表指定的数量,例如将count指定为2...
组合操作符
concat() 可以将多个观察者组合在一,然后按照之前发送顺序发送事件。需要注意的是,concat()最多只能发送4个事件
concatArray() 与concat()作用一样,不过concatArray()可以发送多于4个被观察者
merge() 这个方法和concat()作用基本一样,只是concat()是串行发送事件,而merge()并行发送事件
功能操作符
subscribeOn() 指定被观察者的线程,要注意的是,如果多次调用此方法,只有第一次有效
observeOn()指定观察者的线程,没指定一次就会生效一次
过滤操作符
filter() 通过一定逻辑来过滤别观察者发送的事件,如果返回true,则会发送事件,否则不会发送
Observable 生产者,用来生产数据,只会在订阅之后才会生产
Observer 订阅者,用来接受生产者生产的数据
Disposable 订阅之后的管理者,可以用来中断生产,释放资源
线程切换:rxjava的重要,用来处理异步任务
subscribeOn:表示将生产者置于哪个调度器(线程)
observeOn:表示将消费者置于哪个调度器(线程)
数据转换:
map
flatMap
filter