結構圖
RxJava.png
各個類
觀察者:
Observer
- onNext() : 當被訂閱時執行
- onCompleted() : 所有onNext() 執行完畢后執行
- onError() : 若onNext()過程出現異常,則執行,與onCompleted()互斥。
Subscriber
implement Observer和Subscription,并添加了onStart()方法。
- onStart() : 在onNext()前調用,可用于數據初始化或做前期準備。總是在subscribe時的線程調用,且不能指定線程,所以不適合進行UI操作。
- unsubscribe() : 解除訂閱,不再對Observable的事件進行響應,在適當的適合解除訂閱可以避免OOM。
Action0
常用于非顯式訂閱,因為call中沒有參數,常用來充當onCompleted()。
Action1
常用于非顯式訂閱,因為call中有且僅有一個參數,常用來充當onNext()和onError()。
被觀察者
Observable
持有Onsubscribe對象。
可使用observeOn()和subscribeOn()指定執行線程:
- observeOn() 指定Subscriber所運行在的線程。或者叫做事件消費的線程。
- subscribeOn() 指定subscribe()所發生的線程,即 Observable.OnSubscribe被激活時所處的線程。或者叫做事件產生的線程。
參數有:
Schedulers.immediate()/Schedulers.newThread()/Schedulers.io()/Schedulers.computation()/AndroidSchedulers.mainThread()
加載數據常用:
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
Onsubscribe
- call(Subscriber) : 可調用Subscriber中的onNext/onCompleted/onError等方法。
實現方法
- 創建Observable
a. 用Observable.create(),傳入OnSubscribe對象,實現里面的call方法。
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();
}
});
b. 使用操作符just,參數有序,越靠前的參數執行順序也越靠前。
Observable observable = Observable.just("Hello", "Hi", "Aloha");
c. 使用操作符from,參數為集。
String[] words = {"Hello", "Hi", "Aloha"};
Observable observable = Observable.from(words);
- 創建Observer
a. new Observer OR Subscriber,實現onNext()/onCompleted()/onError()。推薦實現Subscriber。
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!");
}
};
b. 不完整回調,可只創建其中某個或某些。
Action1<String> onNextAction = new Action1<String>() {
// onNext()
@Override
public void call(String s) {
Log.d(tag, s);
}
};
Action1<Throwable> onErrorAction = new Action1<Throwable>() {
// onError()
@Override
public void call(Throwable throwable) {
// Error handling
}
};
Action0 onCompletedAction = new Action0() {
// onCompleted()
@Override
public void call() {
Log.d(tag, "completed");
}
};
- 訂閱
a. new Observer OR Subscriber,則:
observable.subscribe(observer);
// 或者:
observable.subscribe(subscriber);
b. 不完整定義,會自動創建Subscribe,并識別參數定義相關方法。
observable.subscribe(onNextAction);
observable.subscribe(onNextAction, onErrorAction);
observable.subscribe(onNextAction, onErrorAction, onCompletedAction);