Rxjava學習筆記(一)

當Rxjava火了很久之後,纔想起來學習一哈,不然就落伍了……^_^
Rxjava是基於觀察者模式設計的,(至於什麼是觀察者模式,有需要了解的自己查,哈哈哈)。
上硬菜,首先這裏涉及到兩個概念,觀察者和被觀察者。被觀察者發生變化就立馬通知觀察者,做出相應的事件處理過程。這就是Observable(被觀察者)和Observer(觀察者)。它們之間通過訂閱關係連接。
首先來一個最簡單的Observable代碼。

 Observable<Integer> observable=Observable.create(new   ObservableOnSubscribe<Integer>() {
 @Override
public void subscribe(@NonNull ObservableEmitter<Integer> e) throws Exception {
                //被觀察者的動作
                e.onNext(1);
                e.onNext(2);
                e.onNext(3);
                e.onComplete();
            }
        });

我這裏將泛型定義爲Integer類型,ObservableEmitter即爲發送消息的載體,就像handler一樣。
它有兩個常用的方法,onNext()和onComplete(); 第一個方法是填寫發送的消息內容,第二個是提示這一階段發送完成。
接下來看觀察者的代碼

//創建觀察者
 Observer<Integer> observer=new Observer<Integer>() {
 //private Disposable disposable;
 @Override
 public void onSubscribe(@NonNull Disposable d) {
     Log.e(TAG,"-->subscrible");
         disposable=d;
 }

 @Override
 public void onNext(@NonNull Integer integer) {
     Log.e(TAG,"-->"+integer);
       //disposable.dispose();   //截流
 }

 @Override
public void onError(@NonNull Throwable e) {
     Log.e(TAG,"-->error");
}

@Override
public void onComplete() {
   Log.e(TAG,"-->finish");
}
};

剛剛講過它們通過訂閱關係來連接的那就是被觀察者訂閱觀察者,而不是我們平常理解的那樣觀察者訂閱被觀察者,我們可以這樣連接,被觀察者是上游,觀察者是下游,當上遊發送消息時,下游纔可以收到,觀察者是被動的,而被觀察者是主動的,所以是被觀察者訂閱觀察者,不知道這樣說是否能讓大家看明白沒有。

//被觀察者訂閱觀察者
observable.subscribe(observer);

但是,請注意,並不意味着你可以隨意亂七八糟發射事件,需要滿足一定的規則:

上游可以發送無限個onNext, 下游也可以接收無限個onNext.
當上遊發送了一個onComplete後, 上游onComplete之後的事件將會繼續發送, 而下游收到onComplete事件之後將不再繼續接收事件.
當上遊發送了一個onError後, 上游onError之後的事件將繼續發送, 而下游收到onError事件之後將不再繼續接收事件.
上游可以不發送onComplete或onError.
最爲關鍵的是onComplete和onError必須唯一併且互斥, 即不能發多個onComplete, 也不能發多個onError, 也不能先發一個onComplete, 然後再發一個onError, 反之亦然。

好了,今天就學習到這裏,馬上下班啦

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章