1. 程式人生 > >kotlin的RxJava進階為RxJava2

kotlin的RxJava進階為RxJava2

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中的解決背壓問題設計並不完美。