RxJava概念

主要的想法是觀察者模式(Observer Pattern),由觀察者(Observer)及被觀察者(Observable)組成

觀察者透過註冊/訂閱(Subscribe)被觀察者,監控被觀察者。被觀察者只要偵測到變化就會通知觀察者

快速判斷:要判斷觀察者和被觀察者的角色分別,就看哪一個是會先改變的,會先改變的那個就是被觀察者,接收被觀察者通知才改變的就是觀察者

在Java的寫法和觀念顛倒:

observable.subscribe(observer)

Observer

針對Observable的通知行為應該要有些什麼反應

Observer<String> observe = 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, e.getMessage());
    }
}

onNext() -> 接到通知以後會逐條執行的行為

onCompleted() -> 全部onNext()執行完會去執行的方法

onError() -> 執行途中發生錯誤會去執行的方法

Observable

被觀察者如何通知觀察者

Observable observable = Observable.create(new Observable.onSubscribe<String>(){
    @Override
    public void call(Subscriber<? super String> subscriber) {
        subscriber.onNext("Hello!");
        subscriber.onNext("World!");
        subscriber.onCompleted();
    }
})

一旦被訂閱就會觸發call()

Subscribe

observable.subscribe(observer)

Last updated