少年啊,要永远相信美好的事情即将发生
【Android】RxJava系列01-基本概述和基本用法
- 1.RxJava的概述
- 2.RxJava的作用
- 3.观察者和被观察者
- 4.背压
- 5.RxJava的基本用法
- 步骤一,创建Observer(观察者)
- 步骤二,创建Observable(被观察者)
- 步骤三,Subscribe(订阅)
1.RxJava的概述
RxJava是什么?是ReactiveX的一种Java实现。
那,ReactiveX又是什么,我来与君言。
ReactiveX 是 Reactive Extensions的缩写,一般简写为Rx,就这?确实就这。但是微软给出的定义是,Rx是一个函数库,让开发者可以利用可观察序列和LINQ(Language Integrated Query)风格查询操作符来编写异步和基于事件的程序。开发者可以利用Observables 表示异步数据流,用LINQ操作符查询异步数据流,用Schedulers参数化异步数据流的并发处理,Rx可以这样定义:Rx = Observables + LINQ +Schedulers
啊?这这这。定义总是这么抽象,记住Rx是可观察,能异步处理数据流程序的函数库就行了
2.RxJava的作用
大家平时开发中很多场景会用到异步操作,在Android中,我们会用到AsyncTask和Handler,或者创建callback来回调,但是随着请求的数量越来越多,代码逻辑会变得复杂,对阅读代码人来说就是一种“回调地狱”。通过使用RxJava仍旧能保持清晰的逻辑。RxJava的原理是创建一个Observable对象来“干活”,然后使用各种操作符建立起来的链式操作,就如流水线一样,如德芙一样丝滑,把你想要处理的数据一步一步地加工成你想要的成品,之后发送给Subscriber处理(哟,介么帅)。
3.观察者和被观察者
RxJava的异步操作是通过扩展的观察者模式来实现的。
在RxJava中,Observable代表了被观察者,Observer代表了观察者,在RxJava 3.x中有以下几个被观察者
- Observable:发送0个或N个数据,不支持背压。
- Flowable:发送0个或N个数据秒支持背压,它是在RxJava2之后才有的新类型。
- Single:只处理OnSuccess和onError事件,只能发送单个数据或者发送一个错误。
- Compleable:Compleable在创建后,不会发送任何数据,只处理onComplete和onError
- Maybe: 能够发送0个或1个数据。它是在RxJava
4.背压
什么是背压?
背压指的是,在异步场景中,被观察者发送事件的速度远快于观察者处理事件速度的情况下,一种告知上游的被观察者降低发送速度的策略。
从RxJava 2 开始,Observable不再支持背压,而是新增了被观察者Flowable支持背压。Flowable中的操作符和Observable类似,其所有的操作符均强制支持背压。
5.RxJava的基本用法
以RxJava3为例,引入依赖
implementation("io.reactivex.rxjava3:rxandroid:3.0.0")
implementation("io.reactivex.rxjava3:rxjava:3.0.0")
其中,RxAndroid是RxJava在Android平台的扩展,它包含了一些能够简化Android开发的工具。
RxJava的基本用法分为3个步骤
步骤一,创建Observer(观察者)
它决定事件触发的时候将有怎样的行为,代码如下所示
val observer = object : Observer<String> {
override fun onSubscribe(d: Disposable) {
Log.e(TAG, "onSubscribe d ${d.isDisposed} ")
}
override fun onError(e: Throwable) {
Log.e(TAG, "onError e $e ")
}
override fun onComplete() {
Log.e(TAG, "onComplete")
}
override fun onNext(t: String) {
Log.e(TAG, "onNext t: $t")
}
}
- onComplete:事件队列完结,RxJava不仅把每个事件单独处理,而且还会把它们看作一个队列。当不会有新的onNext发出时,需要触发onComplete方法作为完成标志。
- onError:事件队列异常。在事件处理过程中出现异常时,onError方法会触发,同时队列会自动终止,不允许再有事件发出,
- onNext:普通的事件。将要处理的事件添加到事件队列中
- onSubscibe:当订阅时会被调用
步骤二,创建Observable(被观察者)
它决定什么时候触发事件以及触发怎样的事件,RxJava使用create方法来创建一个Observable,并为它定义事件触发规则,代码如下所示:
/**
* 基本创建方式
*/
val observable = Observable.create { emitter ->
emitter.onNext("新年快乐")
emitter.onNext("龙年吉祥")
emitter.onComplete()
}
通过调用subscribe的方法,不断地将事件添加到任务队列中,也可用just方法来实现:
/**
* 通过 just 创建
*/
val observable2 = Observable.just("你好","我是保安队长")
步骤三,Subscribe(订阅)
订阅只需要一行代码就可以了,如下所示:
observable.subscribe(observer)
通过create创建,输出日志如下:
onSubscribe d false
onNext t: 新年快乐
onNext t: 龙年吉祥
onComplete
通过just创建,输出日志如下:
onSubscribe d false
onNext t: 你好
onNext t: 我是保安队长
onComplete
两种方式都是一样,先调用onSubscribe方法,接着调用两个onNext方法,最后调用onComplete方法。
今天的学习学习到此收尾啦,万事开头难,继续坚持,后续学习RxJava常用的操作符