#前言 年底了換工作,在很多公司的面試中都有提到對RxJava運用,在以前我就只是簡單的使用Retrofit +RxJava+OkHttp的運用,自己也沒有深入的理解其中的,現在自己相對於再一次學習,並進行記錄;
##RxJava 的觀察者模式 RxJava 有四個基本概念:Observable (可觀察者,即被觀察者)、 Observer (觀察者)、 subscribe (訂閱)、事件。Observable 和 Observer 通過 subscribe() 方法實現訂閱關係,從而 Observable 可以在需要的時候發出事件來通知 Observer。
與傳統觀察者模式不同, RxJava 的事件回撥方法除了普通事件 onNext() (相當於 onClick() / onEvent())之外,還定義了兩個特殊的事件:onCompleted() 和 onError()。
onCompleted(): 事件佇列完結。RxJava 不僅把每個事件單獨處理,還會把它們看做一個佇列。RxJava 規定,當不會再有新的 onNext() 發出時,需要觸發 onCompleted() 方法作為標誌。 onError(): 事件佇列異常。在事件處理過程中出異常時,onError() 會被觸發,同時佇列自動終止,不允許再有事件發出。 在一個正確執行的事件序列中, onCompleted() 和 onError() 有且只有一個,並且是事件序列中的最後一個。需要注意的是,onCompleted() 和 onError() 二者也是互斥的,即在佇列中呼叫了其中一個,就不應該再呼叫另一個。 ##基本實現 Observer 即觀察者,它決定事件觸發的時候將有怎樣的行為。
Observable.create(new ObservableOnSubscribe<Integer>() {
@Override
public void subscribe(ObservableEmitter<Integer> emitter) throws Exception {
Log.e(TAG, "emit 1");
emitter.onNext(1);
Log.e(TAG, "emit 2");
emitter.onNext(2);
Log.e(TAG, "emit 3");
emitter.onNext(3);
Log.e(TAG, "emit complete");
emitter.onComplete();
Log.e(TAG, "emit 4");
emitter.onNext(4);
}
}).subscribe(new Observer<Integer>() {
private Disposable mDisposable;
private int i;
@Override
public void onSubscribe(Disposable d) {
Log.e(TAG, "subscribe");
mDisposable = d;
}
@Override
public void onNext(Integer value) {
Log.e(TAG, "onNext: " + value);
i++;
if (i == 2) {
Log.e(TAG, "dispose");
mDisposable.dispose();
Log.e(TAG, "isDisposed : " + mDisposable.isDisposed());
}
}
@Override
public void onError(Throwable e) {
Log.e(TAG, "error");
}
@Override
public void onComplete() {
Log.e(TAG, "complete");
}
});
```java
名稱 解析
just() 將一個或多個物件轉換成發射這個或這些物件的一個Observable
fromArray() 將一個Iterable, 一個Future, 或者一個陣列轉換成一個Observable
repeat() 建立一個重複發射指定資料或資料序列的Observable
repeatWhen() 建立一個重複發射指定資料或資料序列的Observable,它依賴於另一個Observable發射的資料
create() 使用一個函式從頭建立一個Observable
defer() 只有當訂閱者訂閱才建立Observable;為每個訂閱建立一個新的Observable
range() 建立一個發射指定範圍的整數序列的Observable
interval() 建立一個按照給定的時間間隔發射整數序列的Observable
timer() 建立一個在給定的延時之後發射單個資料的Observable
empty() 建立一個什麼都不做直接通知完成的Observable
error() 建立一個什麼都不做直接通知錯誤的Observable
never() 建立一個不發射任何資料的Observable
[Star 我的GitHub](https://github.com/Jayqiu)
[# Back](https://jayqiu.github.io/blog)
複製程式碼