Rxjava 系列目录
博客创建时间:2021.04.17
博客更新时间:2021.04.12
以Android studio build=4.1.3,gradle=6.5,SdkVersion 30来分析讲解。如图文和网上其他资料不一致,可能是别的资料版本较低而已
前言
本篇博文主要讲解在使用Rxjava中的常用操作符。操作的使用能使我们的代码极其简单和容易阅读。
创建操作符
1. create
最常见的创建方式,内部方法在mObservable被订阅时执行
private fun create() {
val mObservable: Observable<String> = Observable.create {}
}
2. just
just操作符的功能就是将一个对象转化为Observable。这里将字符创变为了一个Observable。
val myObservable = Observable.just("Hello, world!")
3.from操作符
val mObservable: Observable<String> = Observable.from("Hello", " world!", "how", "are", "you")
该方法已经在Rxjava3中没有了
转换操作符
1. map
接收一种类型的Observable,转化为另外一种Observable。如下将String类型转为Int型
Observable.just("110").map { s -> s.toInt() }
.subscribe {
val data = it * 6
val i = Log.i("+++++++++", "" + data)
}
2. flatMap操作符
接收一个Observable的输出作为输入,同时输出另外一个Observable
Observable.just("Hello, world!").flatMap { s: String ->
val data = "测试$s"
Observable.just(data)
}
限定操作符
1. filter
顾名思义filter操作符就是过滤用的,相当于加个判断条件。
Observable.fromArray(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
.filter { data -> data in 4..7 }
.subscribe { data -> Log.i("+++++++++", "" + data) }
// 运行输出: 4 5 6 7
2. take
限定个数,比如此处限定 2个元素
Observable.fromArray(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
.filter { data -> data in 4..7 }
.take(2)
.subscribe { data -> Log.i("+++++++++", "" + data) }
// 运行输出: 4 5
3. doOnNext
输出一个元素之前做一些额外的事情,比如保存数据
Observable.fromArray(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
.filter { data -> data in 4..7 }
. doOnNext{data->
run {
//TODO 保存数据
}
}
.subscribe { data -> Log.i("+++++++++", "" + data) }
限流操作符
下面的操作符都是背压策略可采用的操作符
1. sample与throttleLast
定期收集observable发送的数据items,并发射出最后一个数据item。
query().sample(500,TimeUnit.MILLISECONDS)
query().throttleLast(500,TimeUnit.MILLISECONDS)
2. throttleFirst
指定时间发送最后或第一个元素
query().throttleFirst(500,TimeUnit.MILLISECONDS)
3. debounce 与 throttleWithTimeout
只发送在规定时间间隔内最后一个元素。与sample
与throttleLast
有所不同的是只会发射一次数据
query().debounce(500,TimeUnit.MILLISECONDS)
query().throttleWithTimeout(500,TimeUnit.MILLISECONDS)
4. buffer and window
定期关闭并释放突发性的 Observable 缓冲区。
query().buffer(500,TimeUnit.MILLISECONDS)
query().window(500,TimeUnit.MILLISECONDS)
其他操作符
1.subscribeOn/observeOn
这两个操作符一般都是成对出现的,他们的功能就是切换线程。
subscribeOn()主要改变的是被观察者的线程,即call()执行的线程;
observeOn()主要改变的是观察者的线程,即onNext()执行的线程。
mObservable.subscribeOn(Schedulers.io())
.observeOn( AndroidSchedulers.mainThread())
.subscribe { println(" Observable has subscribe") }
注意:
subscribeOn在observeOn后调用无效
总结
本测试Demo源码
gitee:https://gitee.com/luofaxin/RxJava3Analysis.git
github:https://github.com/l424533553/RxJava3Analysis.git
相关链接:
扩展链接:
- Rxjava源码分析之IO.Reactivex.Observer
- Rxjava源码分析之IO.Reactivex.CompositeDisposable
- Rxjava源码分析之IO.Reactivex.Observable
扩展训练:
- 多种操作符的使用
博客书写不易,您的点赞收藏是我前进的动力,千万别忘记点赞、 收藏 ^ _ ^ !