Rxjava我們可以把他理解成一個河流,事件的起點我們稱爲上游,事件的終點我們稱爲下游,河裏面的水都是從上而下流動,所以Rxjava也一樣,只能從事件的起源再到事件的處理,不可逆狀態,我們如果想要改變事件只能在上游和下游之間對事件進行攔截.
上游: 被觀察者(Observable)
下游: 觀察者(Observer)
示例代碼
public void rx01(View view) {
//Rxjava的起點 被觀察 上游
Observable.create(new ObservableOnSubscribe<String>() {
@Override
public void subscribe(ObservableEmitter<String> e) throws Exception {
Log.e(TAG, "上游開始發射事件 1" );
e.onNext("1");
Log.e(TAG, "上游發射事件 完成 " );
}
}).subscribe(//訂閱,讓被觀察和觀察者產生關聯
//Rxjava的終點 觀察者 下游
new Observer<String>() {
@Override
public void onSubscribe(Disposable d) {
Log.e(TAG, "訂閱成功");
}
@Override
public void onNext(String s) {
Log.e(TAG, "下游接收處理事件 onNext " + s);
}
@Override
public void onError(Throwable e) {
}
@Override
public void onComplete() {
}
});
}
輸出:
訂閱成功
上游開始發射事件 1
下游接收處理事件 onNext 1
上游發射事件 完成
經過多次測試總結:
結論一: 順序: 先是下游和上游訂閱成功的onSubscribe,然後是上游的發射事件subscribe,
如果上游戲先有onNext那麼下游就會接收到onNext事件.
結論二: 如果上游先發射onComplete,再發射onError時,會出現閃崩現象,Rxjava不允許這樣
結論三: 如果上游先發射onError,再發射onComplete時,下游會走onError但是不會走onComplete
結論四 如果上游發射了onComplete或者onError事件,那麼他以後的onNext都不會觸發到下游的onNext事件
結論五 切斷下游,如果我的的Activity銷燬了這時個就要切斷下游接收事件,dispose()