一.RxJava是一個實現異步操作的庫
二.觀察者模式
觀察者:監視着被觀察者的行爲,當被觀察者某個狀態改變的時候會通知觀察者,觀察者會執行對應的操作;
被觀察者:被監視的對象,當某個狀態改變的時候會通知觀察者;
訂閱(或註冊):將觀察者和被觀察者建立聯繫。
常用的例子:點擊Button後觸發OnClickListener中的onClick()事件。在這個事件中他們的角色分別如下:
觀察者:OnClickListener;
被觀察者:Button;
訂閱(或註冊):setOnClickListener()。
三.RxJava是觀察者模式
1.Observer或Subscribers即觀察者,它決定事件觸發的時候將有怎樣的行爲。
(1) RxJava 觀察者的事件回調方法除了普通事件onNext()(相當於onClick()/onEvent())之外,還定義了兩個特殊的事件:onCompleted()和onError()。
(2) onCompleted(): 事件隊列完結。RxJava 不僅把每個事件單獨處理,還會把它們看做一個隊列。RxJava 規定,當不會再有新的onNext()發出時,需要觸發onCompleted()方法作爲標誌。
(3) onError(): 事件隊列異常。在事件處理過程中出異常時,onError()會被觸發,同時隊列自動終止,不允許再有 事件發出。
(4) 在一個正確運行的事件序列中,onCompleted()和onError()有且只有一個,並且是事件序列中的最後一個。需要注意的是,onCompleted()和onError()二者也是互斥,即在隊列中調用了其中一個,就不應該再調用另一個。
2.Observable 即被觀察者,它決定什麼時候觸發事件以及觸發怎樣的事件。可以使用create()、just(T...)、fromArray(T[]) 來創建一個 Observable ,併爲它定義事件觸發規則。
3.訂閱,創建了Observable和Observer或Subscribers之後,再用subscribe()方法將它們聯結起來
四.使用
1.添加依賴
compile 'io.reactivex.rxjava2:rxandroid:2.0.1'
compile 'io.reactivex.rxjava2:rxjava:2.1.0'
2.創建Observer或Subscriber觀察者
Observer<String> observer = new Observer<String>() {
@Override
public void onSubscribe(@io.reactivex.annotations.NonNull Disposable d) {
}
@Override
public void onNext(@io.reactivex.annotations.NonNull String s) {
Log.i(TAG, s);
}
@Override
public void onError(@io.reactivex.annotations.NonNull Throwable e) {
Log.i(TAG, "Error");
}
@Override
public void onComplete() {
Log.i(TAG, "Completed");
}
};
Subscriber<String> subscriber = new Subscriber<String>() {
@Override
public void onSubscribe(Subscription s) {
}
@Override
public void onNext(String s) {
Log.d(tag, "Item: " + s);
}
@Override
public void onError(Throwable t) {
Log.d(tag, "Error!");
}
@Override
public void onComplete() {
Log.d(tag, "Completed!");
}
};
3.使用Observable.create()創建被觀察者
Observable<String> observable = Observable.create(new ObservableOnSubscribe<String>() {
@Override
public void subscribe(@io.reactivex.annotations.NonNull ObservableEmitter<String> e) throws Exception {
e.onNext("Hello");
e.onNext("Wrold");
e.onComplete();
}
});
4.使用Observable.just()創建被觀察者
Observable observable = Observable.just("Hello","Wrold");
5.使用Observable.fromArray()創建被觀察者
String[] strings = {"Hello","Wrold"};
Observable observable = Observable.fromArray(strings);
6.訂閱
observable.subscribe(observer);