RXJava入門總結以及簡易Demo

Rxjava由於其基於事件流的鏈式調用、邏輯簡潔 & 使用簡單的特點,深受各大 Android開發者的歡迎

在android開發框架中:RxJava+Retrofit+MVP+Dagger2(主流框架)中Rxjava是對網絡連接處理和圖片加載處理非常好用的異步操作方法,類似於Android中的AysncTask、Handler

Rxjava的模式類似於Java的觀察者模式

被觀察者:Observable

觀察者:Observer

通過訂閱來關聯觀察者和被觀察者:Subscribe

然後我覺得比較重要在線程切換方面的兩個方法的區別:

ObserveOn

指定一個觀察者在哪個調度器上觀察這個Observable

SubscribeOn

指定Observable自身在哪個調度器上執行

補充:對事件總線有理解的的,還可以去查看一下RxBus來看一下Rxjava的事件總線處理機制

下面通過一個demo來簡易介紹Rxjava怎麼使用:

開發的IDE是android studio ,如果你是eclipse請點右上角的X

build.grade(app)中添加依賴:

implementation 'io.reactivex.rxjava2:rxjava:2.0.1'
implementation 'io.reactivex.rxjava2:rxandroid:2.0.1'

第一個Demo是將被觀察者和觀察者和訂閱都分開寫。

創建被觀察者:

 Observable<Integer> observable = Observable.create(new ObservableOnSubscribe<Integer>() {
            @Override
            public void subscribe(ObservableEmitter<Integer> e) throws Exception {
                e.onNext(1);
                e.onNext(2);
                e.onNext(3);
                e.onNext(4);//要發送的事件
            }
        });//創建被觀察者

創建觀察者

  Observer<Integer> observer = new Observer<Integer>() {
            private Disposable mDisposable;
            @Override
            public void onSubscribe(Disposable d) {
                Log.d(TAG, "開始採用subscribe連接");
                mDisposable = d;
            }

            @Override
            public void onNext(Integer value) {
                Log.d(TAG, "對Next事件" + value + "作出相應");
                if(value == 2){
                    mDisposable.dispose();
                    Log.d(TAG,"已經斷開連接:"+mDisposable.isDisposed());
                }
            }

            @Override
            public void onError(Throwable e) {
                Log.d(TAG, "對Error事件作出響應");
            }

            @Override
            public void onComplete() {
                Log.d(TAG, "對Complete事件作出響應");
            }
        };

補充:代碼中有一行這個代碼解釋一下

            private Disposable mDisposable;

這個代碼是訂閱者和被訂閱者的關係斷開的一個控制變量。

取消訂閱:

mDisposable.dispose();
取消訂閱後,觀察者就無法在接受被觀察者發來的信息了

將被觀察者和觀察者通過訂閱關係綁定

observable.subscribe(observer);

但是上面的代碼,從字面上理解是被觀察者訂閱觀察者,從字面上理解有問題,其實從機制上來說沒問題,我個人的理解就是觀察者相當於一個接收器,而被觀察者是發起消息的發送器,發送器來綁定一個接受器這樣的邏輯,如果不對,還請多多指教。

下面是Rxjava典型的鏈式結構:

Observable.create(new ObservableOnSubscribe<Integer>() {
           @Override
           public void subscribe(ObservableEmitter<Integer> e) throws Exception {
               e.onNext(1);
               e.onNext(2);
               e.onNext(3);
               e.onNext(4);
           }
       }).subscribe(new Observer<Integer>() {
           @Override
           public void onSubscribe(Disposable d) {
               Log.d(TAG,"開始採用subscribe連接");
           }

           @Override
           public void onNext(Integer value) {
                Log.d(TAG,"對Next事件"+value+"作出響應");
           }

           @Override
           public void onError(Throwable e) {
                Log.d(TAG,"對ERROR事件作出響應");
           }

           @Override
           public void onComplete() {
                Log.d(TAG,"對Complete事件作出響應");
           }
       });

發佈了34 篇原創文章 · 獲贊 8 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章