文章目錄
- 四個基本概念
- 回呼方法
- 基本實作
- Observer 觀察者
- Subscriber 訂閱者
- Observable 被觀察者
- Subscribe (訂閱)
- Action
- 總結
RxJava 是一個在 Java VM 上使用可觀測的序列來組成異步的、基于事件的程式的庫,總之一句話就是異步,
它是一種擴展的觀察者模式,
四個基本概念
- Observable:被觀察者
- Observer:觀察者
- subscribe:訂閱
- 事件
回呼方法
- onNext():相當于 onClick() / onEvent()
- onCompleted():當不會有新的 onNext()方法觸發時呼叫
- onError():時間佇列例外,同時佇列自動終止,且和onCompleted() 方法只能觸發其中一個,
基本實作
Observer 觀察者
Observer<String> observer = new Observer<String>() {
@Override
public void onNext(String s) { Log.d(tag, "Item: " + s); }
@Override
public void onCompleted() { Log.d(tag, "Completed!"); }
@Override
public void onError(Throwable e) { Log.d(tag, "Error!"); }
};
Subscriber 訂閱者
Subscriber 對 Observer 介面進行了一些擴展,但他們的基本使用方式是完全一樣的
Subscriber<String> subscriber = new Subscriber<String>() {
@Override
public void onNext(String s) { Log.d(tag, "Item: " + s); }
@Override
public void onCompleted() { Log.d(tag, "Completed!"); }
@Override
public void onError(Throwable e) { Log.d(tag, "Error!"); }
};
額外方法:
- onStart():這是 Subscriber 新增方法,會在 subscribe 剛開始,而事件還未發送之前被呼叫,可以用于做一些準備作業,如果有執行緒要求,則不適用,因為總是在subscibe發生的執行緒被呼叫,
- unsubscribe():用于取消訂閱,在這個方法被呼叫后,Subscriber將不再接收事件;可用 isUnsubscribed() 判斷是否訂閱,在 subscribe() 之后, Observable 會持有 Subscriber 的參考,所以在合適的地方呼叫該方法,防止記憶體泄漏,
Observable 被觀察者
create()創建
Observable observable = Observable.create(new Observable.OnSubscribe<String>() {
@Override
public void call(Subscriber<? super String> subscriber) {
subscriber.onNext("Hello");
subscriber.onNext("Hi");
subscriber.onNext("Aloha");
subscriber.onCompleted();
}
});
//這里傳入一個 OnSubscribe 物件作為引數,OnSubscribe 會被存盤在回傳的
// Observable 物件中,相當一個計劃表,Observable 被訂閱的時候,
// OnSubscribe 的 call() 方法會自動被呼叫,事件序列就會依照設定依次觸發,
just(T...)將傳入的引數依次發送過來
Observable observable = Observable.just("Hello", "Hi", "Aloha");
// 將會依次呼叫:
// onNext("Hello");
// onNext("Hi");
// onNext("Aloha");
// onCompleted();
from(T[])/from(Iterable<? extends T>)將傳入的陣列或 Iterable 拆分成具體物件后,依次發送出來
String[] words = {"Hello", "Hi", "Aloha"};
Observable observable = Observable.from(words);
// 將會依次呼叫:
// onNext("Hello");
// onNext("Hi");
// onNext("Aloha");
// onCompleted();
其中 just(T…) 和 from(T[]) 和 create(OnSubscribe)是等價的,
Subscribe (訂閱)
創建 Observable 和 Observer 之后,再用 subscribe() 方法鏈接起來
observable.subscribe(observer);
// 或者:
observable.subscribe(subscriber);
被觀察者,訂閱觀察者,當被訂閱的時候,是 subscribe() 方法執行的時候
除了 subscribe(Observer) 和 subscribe(Subscriber) ,subscribe() 還支持不完整定義的回呼:
Action
Action1<String> onNextAction = new Action1<String>() {
// onNext()
@Override
public void call(String s) {
Log.d(tag, s);
}
};
Action1<Throwable> one rrorAction = new Action1<Throwable>() {
// one rror()
@Override
public void call(Throwable throwable) {
// Error handling
}
};
Action0 onCompletedAction = new Action0() {
// onCompleted()
@Override
public void call() {
Log.d(tag, "completed");
}
};
// 自動創建 Subscriber ,并使用 onNextAction 來定義 onNext()
observable.subscribe(onNextAction);
// 自動創建 Subscriber ,并使用 onNextAction 和 one rrorAction 來定義 onNext() 和 one rror()
observable.subscribe(onNextAction, one rrorAction);
// 自動創建 Subscriber ,并使用 onNextAction、 one rrorAction 和 onCompletedAction 來定義 onNext()、 one rror() 和 onCompleted()
observable.subscribe(onNextAction, one rrorAction, onCompletedAction);
Action0
只有 call() 一個回呼方法,且是無參無回傳值的,
onCompleted() 是無參無回傳的函式,所以 Action0 可以定義不完整回呼
Action1
只有 call(T param) 一個回呼方法,且是有一個引數 and 無回傳值的,
onNext(T obj) 和 one rror(Throwable error) 是有引數的,所以 Action1 可以定義不完整回呼
總結
RXjava 是個好東西,但是學習起來還是有些難度,想要使用好它,只有在實戰中不斷的去實踐,
以上這些是我以前整理的知識,希望對大家有用,最后推薦一個博客: 干貨集中營
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/333838.html
標籤:其他
