RxJava2是一套處理非同步(asynchronous)事件的library,這個library是基於觀察者的模式來設計的。
觀察者模式
定義了物件之間的一對多關係,如此一來,當一個物件改變狀態,其他相依者都會收到通知並自動被更新
舉例來說:大家在youtube看影片時,都會訂閱一些自己喜歡看的youtuber的影片,假設該youtuber為被觀察者,而自己是觀察者,平時不會特別去關注該youtuber的影片是否更新,但只要當該youtuber有新的影片,有訂閱該youtuber的人都會收到通知。
RxJava優點
1.方便的處理線程切換的問題
2.當邏輯代碼越來越複雜,RxJava仍可保持可讀性
RxJava基本使用
第一步:加入套件
implementation 'io.reactivex.rxjava2:rxjava:2.2.6'
implementation 'io.reactivex.rxjava2:rxandroid:2.1.1'
第二步:創建Observable(被觀察者)
Observable<String> note=Observable.create(new ObservableOnSubscribe<String>() {
@Override
public void subscribe(ObservableEmitter<String> emitter) throws Exception {
//ObservableEmitter:Emitter翻為發送器,發送訊息,有三種發送方法:void onNext(T value)、onError(Throwable error)、onComplete()
emitter.onNext("Hello");
emitter.onNext("This is Eles's note");
emitter.onNext("Thanks for watching");
emitter.onComplete();
}
});
第三步:創建Observer(觀察者)
Observer<String> reader =new Observer<String>() {
@Override
public void onSubscribe(Disposable d) { //事件還未發送前先調用,Disposable可用來做取消訂閱
Log.d(TAG,"onSubscribe:");
}
@Override
public void onNext(String s) { //處理的事件
Log.d(TAG,"onNext:"+ s);
}
@Override
public void onError(Throwable e) { //事件處理過程中出現異常情況時,會調用onError(),同時終止事件發送
Log.d(TAG,"onError:"+ e);
}
@Override
public void onComplete() { //事件處理完成,當onNext()發送完畢後調用
Log.d(TAG,"onComplete()");
}
};
第四步:創建subscribe(建立訂閱關係)
note.subscribe(reader); //note被reader訂閱
log結果
明天會補充rxjava其餘部分