Android架構師RX響應式程式設計——Rxjava實戰專案教學

語言: CN / TW / HK

開啟掘金成長之旅!這是我參與「掘金日新計劃 · 12 月更文挑戰」的第30天,點選檢視活動詳情

RX定義

  • Rx是一個函式庫,讓開發者可以利用可觀察序列和LINQ風格查詢操作符來編寫非同步和基於事件的程式
  • Rx是微軟.NET的一個響應式擴充套件。Rx藉助可觀測的序列提供一種簡單的方式來建立非同步的,基於事件驅動的程式。
  • Rx就是一種響應式程式設計,來建立基於事件的非同步程式

RXJava簡介

RxJava就是一種用Java語言實現的響應式程式設計,來建立基於事件的非同步程式

官方定義: 一個在 Java VM 上使用可觀測的序列來組成非同步的、基於事件的程式的庫

RXJava原理

  • RxJava: 基於 一種擴充套件的觀察者模式
  • RxJava的擴充套件觀察者模式中有4個角色:

圖片

簡單使用方法

程式碼示例:

Observable.create(new ObservableOnSubscribe<Integer>() {            @Override            public void subscribe(ObservableEmitter<Integer> emitter) throws Exception {                emitter.onNext(1);                emitter.onComplete();           }       })               .subscribeOn(Schedulers.io())               .observeOn(AndroidSchedulers.mainThread())               .subscribe(new Consumer<Integer>() {                    @Override                    public void accept(Integer integer) throws Exception {                        Log.d(TAG, "accept integer = " + integer);                   }               });

解釋說明:

  • 建立被觀察者,傳送事件,即emitter.onNext(1),傳送了數字1;
  • 指定被觀察者的執行執行緒,Schedulers.io();
  • 觀察者處理接收到的資料;
  • 切換執行緒到主執行緒,觀察者將在主執行緒處理這些資料。

實戰專案解析

新增依賴

compile 'io.reactivex.rxjava2:rxjava:2.0.0-RC5' compile 'io.reactivex.rxjava2:rxandroid:2.0.0-RC1'

基理

ObservableObserver通過subscribe()方法實現訂閱關係Rxjava中是**自動傳送事件**的, 一旦**訂閱**就開始**傳送**


基本使用三個步驟

img

  • 第一步,建立ObservableEmitter發射器的意思, 在subscribe方法中不斷呼叫發射器的方法; 總共有onNext()、onComplete()、onError()三個方法; 用法參考Rxjava1:

img

img

  • 第二步,建立Observer, 總共有onNext()、onComplete()、onError()、onSubscribe()四個方法; 其中, **onNext()、onComplete()、onError()**三個方法分別對應著第一步中**Observable****onNext()、onComplete()、onError()**三個方法, 只要**Observable**發出(呼叫)對應的方法, **Observer**對應的方法就會被呼叫;
  • onError()onComplete是互斥的,一次只能呼叫一個;
  • 第三步,訂閱, observable.subscribe(observer);

下面開始實戰內容

  • 在app/build.gradle中新增依賴:

dependencies {    implementation fileTree(dir: 'libs', include: ['*.jar']) ​    implementation 'com.android.support:appcompat-v7:28.0.0'    implementation 'io.reactivex.rxjava2:rxjava:2.0.0-RC5'    implementation 'io.reactivex.rxjava2:rxandroid:2.0.0-RC1'    implementation 'com.squareup.retrofit2:retrofit:2.1.0'    implementation 'com.squareup.retrofit2:converter-gson:2.1.0' //   compile 'com.squareup.retrofit2:adapter-rxjava:2.1.0' ​ //   compile 'com.jakewharton.rxbinding:rxbinding:0.4.0' }

activity_main.xml:

```

​ ​