前言
人真是一种可怕的动物,每个人都能专注 在做他喜欢的事的时候,入职新的公司很忙,最近一直在学东西,基本上都是用到啥就看一看,根本没时间总结写博客。
认识RxJava
RxJava是一个Java VM 上使用可观测的序列来组成异步的、基于事件的程序的库,在Android的开发中一般就是使用他的操作符配合Retrofit实现异步的网络请求。
作用
相当于Android中的handler和AsyncTask等实现异步的操作
特点
- 逻辑简洁
- 实现优雅
使用简单
更重要的是随着逻辑的复杂他依然可以保持它的特性使逻辑清晰
原理
RxJava的设计的原理就是观察者和被观察者 被观察者产生要处理的时间观察者对产生的事件进行处理 他们之间通过订阅来建立联系
- 事件:被观察者和观察者之间的沟通的载体
- 被观察者:产生事件的事件元
- 观察者:对观察者产生的事件进行处理
- 订阅:建立二者之间的联系
简单的使用
1 使用的步骤是
2 具体的实现的代码
/***
* RxJava 实现的是异步的网络操作 同时支持线程指之间的切换
* 创建被观察者 发送是事件要被处理的事物
* create() 是最基本的创建RxJava的方法 通过实现接口的subscribe()定义发送的事件
*/
val observable = Observable.create(object : ObservableOnSubscribe<Int> {
/***
* ObservableEmitter 是一个事件发送器 作用是用来发送事件的
*/
override fun subscribe(e: ObservableEmitter<Int>?) {
e!!.onNext(1)
e!!.onNext(2)
e!!.onNext(3)
e!!.onNext(4)
e!!.onNext(5)
e!!.onNext(6)
e!!.onComplete()
}
/***
* subscribeOn() 指定的是被观察者运行的线程
* observeOn() 指定的是观察者运行的线程
* Schedulers.io() 代表io操作的线程, 通常用于网络,读写文件等io密集型的操作
* Schedulers.computation() 代表CPU计算密集型的操作, 例如需要大量计算的操作
* Schedulers.newThread() 代表一个常规的新线程
* AndroidSchedulers.mainThread() 代表Android的主线程
*/
// 订阅的关系的建立
}).subscribe(object : Consumer<Int> {
override fun accept(t: Int?) {
// 正常的事件处理逻辑
}
}, object : Consumer<Throwable> {
override fun accept(t: Throwable?) {
// 异常的情况下的处理逻辑
}
})
本实例在建立了订阅的关系之后通过两个RxJava提供的函数对接收的数据处理和对异常信息的处理
RxJava提供了一系列的函数式接口实现简单的观察者
Subscribe的一系列重载方法
public final Disposable subscribe() {}
// 表示观察者不对被观察者发送的事件作出任何响应(但被观察者还是可以继续发送事件)
public final Disposable subscribe(Consumer<? super T> onNext) {}
// 表示观察者只对被观察者发送的Next事件作出响应
public final Disposable subscribe(Consumer<? super T> onNext, Consumer<? super Throwable> onError) {}
// 表示观察者只对被观察者发送的Next事件 & Error事件作出响应
public final Disposable subscribe(Consumer<? super T> onNext, Consumer<? super Throwable> onError, Action onComplete) {}
// 表示观察者只对被观察者发送的Next事件、Error事件 & Complete事件作出响应
public final Disposable subscribe(Consumer<? super T> onNext, Consumer<? super Throwable> onError, Action onComplete, Consumer<? super Disposable> onSubscribe) {}
// 表示观察者只对被观察者发送的Next事件、Error事件 、Complete事件 & onSubscribe事件作出响应
public final void subscribe(Observer<? super T> observer) {}
// 表示观察者对被观察者发送的任何事件都作出响应
对观察者方法的重载是得我们可以支队我们关心的事件做处理 ,就是更加人性化