kotlin的RxJava進階為RxJava2
阿新 • • 發佈:2019-01-02
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中的解決背壓問題設計並不完美。