前言
- 官方定義:
RxJava
是一個反應性擴充套件的Java VM實現:一個庫,用於使用可觀察序列組合非同步和基於事件的程式 - 特點:
Rxjava
由於其基於事件流的鏈式呼叫、邏輯簡潔 & 使用簡單的特點,深受各大 Android開發者的歡迎。
功能
- 基於事件流實現非同步操作,等同於 Android中的 AsyncTask 、Handler作用
特點
- 基於事件流的鏈式呼叫
- 邏輯簡潔
- 實現優雅
- 使用簡單
- 隨著程式邏輯的複雜性提高,依然能夠保持程式碼簡潔
原理
Rxjava
原理 基於 一種擴充套件的觀察者模式
被觀察者 (Observable) 通過 訂閱(Subscribe) 按順序傳送事件 給觀察者 (Observer), 觀察者(Observer) 按順序接收事件 以及作出對應的響應動作
- 被觀察者(Observable) 產生事件
- 觀察者(Observer) 接收事件,並給出響應動作
- 訂閱(Subscribe) 連線 被觀察者 & 觀察者
- 事件(Event) 被觀察者 & 觀察者 連線的橋樑
基本使用
1.傳統方式一
- 加入依賴
implementation 'io.reactivex.rxjava2:rxjava:2.2.8'
implementation 'io.reactivex.rxjava2:rxandroid:2.1.1'
複製程式碼
- 建立被觀察者 observable &產生事件
// 1. 建立被觀察者 Observable 物件
Observable<Integer> observable = Observable.create(new ObservableOnSubscribe<Integer>() {
// 2. 在複寫的subscribe()裡定義需要傳送的事件
@Override
public void subscribe(ObservableEmitter<Integer> emitter) throws Exception {
// 通過 ObservableEmitter類物件產生事件並通知觀察者
// ObservableEmitter類介紹
// a. 定義:事件發射器
// b. 作用:定義需要傳送的事件 & 向觀察者傳送事件
emitter.onNext(1);
emitter.onNext(2);
emitter.onNext(3);
emitter.onComplete();//事件完成,可以選擇繼續傳送事件
}
});
複製程式碼
- 建立觀察者 (Observer )並 定義響應事件的行為
Observer<Integer> observer = new Observer<Integer>() {
// 通過複寫對應方法來 響應 被觀察者
@Override
public void onSubscribe(Disposable d) {
Log.d(TAG, "開始連線");
}
// 預設最先呼叫複寫的 onSubscribe()
@Override
public void onNext(Integer value) {
Log.d(TAG, "處理事件"+ value );
}
@Override
public void onError(Throwable e) {
Log.d(TAG, "處理事件"+ value );
}
}
@Override
public void onComplete() {
Log.d(TAG, "事件完成.不在接收任何事件" );
}
}
};
複製程式碼
- 通過訂閱(Subscribe)連線觀察者和被觀察者
observable.subscribe(observer);
複製程式碼
2.基於事件流鏈式方式
Observable.create(new ObservableOnSubscribe<Integer>() {
// 1. 建立被觀察者 & 生產事件
@Override
public void subscribe(ObservableEmitter<Integer> emitter) throws Exception {
emitter.onNext(1);
emitter.onNext(2);
emitter.onNext(3);
emitter.onComplete();
}
}).subscribe(new Observer<Integer>() {
// 2. 通過通過訂閱(subscribe)連線觀察者和被觀察者
// 3. 建立觀察者 & 定義響應事件的行為
@Override
public void onSubscribe(Disposable d) {
Log.d(TAG, "開始採用subscribe連線");
}
// 預設最先呼叫複寫的 onSubscribe()
@Override
public void onNext(Integer value) {
Log.d(TAG, "處理事件"+ value );
}
@Override
public void onError(Throwable e) {
Log.d(TAG, "處理Error事件,不再接收事件");
}
@Override
public void onComplete() {
Log.d(TAG, "處理Complete事件,不再接收事件");
}
});
}
複製程式碼
- 中斷連線關係
觀察者 無法繼續 接收 被觀察者的事件,但被觀察者還是可以繼續傳送事件
// 主要在觀察者 Observer中 實現
Observer<Integer> observer = new Observer<Integer>() {
// 1. 定義Disposable類變數
private Disposable mDisposable;
@Override
public void onSubscribe(Disposable d) {
Log.d(TAG, "開始採用subscribe連線");
// 2. 對Disposable類變數賦值
mDisposable = d;
}
@Override
public void onNext(Integer value) {
Log.d(TAG, "對Next事件"+ value +"作出響應" );
if (value == 2) {
// 設定在接收到第二個事件後切斷觀察者和被觀察者的連線
mDisposable.dispose();
Log.d(TAG, "已經中段了連線:" + mDisposable.isDisposed());
}
}
@Override
public void onError(Throwable e) {
Log.d(TAG, "處理Error事件"); //無法收到Error事件了
}
@Override
public void onComplete() {
Log.d(TAG, "處理Complete事件");//無法收到Complete事件了
}
};
複製程式碼
總結
Rxjava
原理 基於 一種擴充套件的觀察者模式
被觀察者 (Observable) 通過 訂閱(Subscribe) 按順序傳送事件 給觀察者 (Observer), 觀察者(Observer) 按順序接收事件 以及作出對應的響應動作
- 被觀察者(Observable) 產生事件
- 觀察者(Observer) 接收事件,並給出響應動作
- 訂閱(Subscribe) 連線 被觀察者 & 觀察者
- 事件(Event) 被觀察者 & 觀察者 連線的橋樑
至此,Rxjava的基本介紹和使用就完成了,感謝閱讀
參考文章:
Android Rxjava:這是一篇 清晰 & 易懂的Rxjava 入門教程
歡迎關注作者darryrzhong,更多幹貨等你來拿喲.
請賞個小紅心!因為你的鼓勵是我寫作的最大動力!
更多精彩文章請關注