RxJava进阶RxJava2
最近在之前做项目的时候用RxJava,后来了解了RxJava2后决定让项目的RxJava进阶为RxJava2。RxJava 2在Reactive-Streams规范的基础上完全重写。规范本身已经从RxJava发展而来,在使用RxJava2之前可以不需要学习RxJava。
- Maven地址和基础包
- 观察者模式
- kotlin代码
- 总结
Maven地址和基础包
- Rxjava
// RxKotlin and RxAndroid
compile "io.reactivex:rxkotlin:$rx_kotlin_version"
compile "io.reactivex:rxandroid:${rx_android_version}"
- RxJava2
io.reactivex.rxjava2:rxjava:2.1.8
io.reactivex.rxjava2:rxandroid:2.0.1
io.reactivex.rxjava2:rxkotlin:2.2.0`
观察者模式
从图中可以看出RxJava 支持在Observeable订阅Observer和Suscriber两个类型,而RxJava2 分开了 Observeable订阅Suscriber这个类型,采用Flowable订阅Suscriber这个类型。
kotlin代码
下面我介绍下在项目中采用的Rxjava和进阶后的Rxjava2的代码区别
- Rxjava
在用户模块实现类
class UserServiceImpl :UserService{
override fun register(mobile: String, pwd: String, verifyCode: String): Observable<Boolean> {
return Observable.just(true)
}
}
在业务层处理用户注册
val userService=UserServiceImpl()
userService.register(username,password,verityCode)
.observeOn(AndroidSchedulers.mainThread())
.subscribeOn(Schedulers.io())
.subscribe(object :Subscriber<Boolean>{
override fun onComplete() {
}
override fun onNext(t: Boolean) {
mView.result("注册成功")
}
override fun onError(e: Throwable) {
}
})
- Rxjava2
在用户模块实现类
class UserServiceImpl :UserService{
override fun register(mobile: String, pwd: String, verifyCode: String): Flowable<Boolean> {
return Flowable.just(true)
}
}
在业务层处理用户注册
val userService=UserServiceImpl()
userService.register(username,password,verityCode)
.observeOn(AndroidSchedulers.mainThread())
.subscribeOn(Schedulers.io())
.subscribe(object :Subscriber<Boolean>{
override fun onComplete() {
}
override fun onSubscribe(s: Subscription?) {
}
override fun onNext(t: Boolean?) {
mView.result("注册成功")
}
override fun onError(t: Throwable?) {
}
})
总结
RxJava和RxJava2从本质上是一个升级。所背压是指在异步场景中,被观察者发送事件速度远快于观察者的处理速度的情况下,一种告诉被观察者降低发送速度的策略。RxJava2 通过Flowable完美的解决了背压问题,而RxJava中的解决背压问题设计并不完美。