參考http://www.jianshu.com/p/814b63036c78
一開始的時候,被RXJAVA的切換來切換去的源碼弄得頭暈暈的,後面思考了一下其思想,就豁然開朗了
之前做類似訂閱觀察者的模式,我們一般這樣定義的,例如A觀察B,也就是B需要回調事件給A,我們會定義一個listener,這個listener實作了監聽行為
然後A需要實作這個listener
public class A implement listener{
}
B的話則是把這個listener作為一個成員
public class B {
Listener listener;
}
然後通過setListener方法把A作為參數傳到B裡面去,這樣B就可以對A進行回調了
那麼其實rxjava的訂閱關系的思想是相通的
上面的B就是observable(被觀察者),A就是subscriber/observer (訂閱者),而listener就是定義行為規範。
(被觀察者)->訂閱->(觀察者)
stringObservable.subscribe(observer);
這個訂閱過程就相當于setListener方法,都是把訂閱者observer作為參數傳入到observable中。
subscribe方法最終的執行代碼是
onSubscribe.call(subscriber)
會觸發onSubscribe對象裡面的call方法,而call方法裡面會調用subscriber的相關方法
//被觀察者
Observable<String> stringObservable = Observable.create(new Observable.OnSubscribe<String>() {
@Override
public void call(Subscriber<? super String> subscriber) {
subscriber.onNext("Hello");
subscriber.onNext("Jenchar");
subscriber.onCompleted();
}
});
這樣就回調到了subscriber,完成了一次事件流的傳輸