Android RxJava:基礎介紹與使用

前言

  • 官方定義:RxJava是一個反應性擴展的Java VM實現:一個庫,用於使用可觀察序列組合異步和基於事件的程序
  • 特色: Rxjava因爲其基於事件流的鏈式調用、邏輯簡潔 & 使用簡單的特色,深受各大 Android開發者的歡迎。

image.png

功能

  • 基於事件流實現異步操做,等同於 Android中的 AsyncTask 、Handler做用

特色

  • 基於事件流的鏈式調用
  • 邏輯簡潔
  • 實現優雅
  • 使用簡單
  • 隨着程序邏輯的複雜性提升,依然可以保持代碼簡潔

原理

  • Rxjava原理 基於 一種擴展的觀察者模式

被觀察者 (Observable) 經過 訂閱(Subscribe) 按順序發送事件 給觀察者 (Observer), 觀察者(Observer) 按順序接收事件 以及做出對應的響應動做java


  • 被觀察者(Observable) 產生事件
  • 觀察者(Observer) 接收事件,並給出響應動做
  • 訂閱(Subscribe) 鏈接 被觀察者 & 觀察者
  • 事件(Event) 被觀察者 & 觀察者 鏈接的橋樑

基本使用

1.傳統方式一

  • 加入依賴
implementation 'io.reactivex.rxjava2:rxjava:2.2.8'
    implementation 'io.reactivex.rxjava2:rxandroid:2.1.1'
  • 建立被觀察者 observable &產生事件
//  1. 建立被觀察者 Observable 對象
        Observable<Integer> observable = Observable.create(new ObservableOnSubscribe<Integer>() {
            // 2. 在複寫的subscribe()裏定義須要發送的事件
            @Override
            public void subscribe(ObservableEmitter<Integer> emitter) throws Exception {
                // 經過 ObservableEmitter類對象產生事件並通知觀察者
                // ObservableEmitter類介紹
                    // a. 定義:事件發射器
                    // b. 做用:定義須要發送的事件 & 向觀察者發送事件
                emitter.onNext(1);
                emitter.onNext(2);
                emitter.onNext(3);
                emitter.onComplete();//事件完成,能夠選擇繼續發送事件
            }
        });
  • 建立觀察者 (Observer )並 定義響應事件的行爲
Observer<Integer> observer = new Observer<Integer>() {
            // 經過複寫對應方法來 響應 被觀察者
            @Override
            public void onSubscribe(Disposable d) {
                Log.d(TAG, "開始鏈接");
            }
            // 默認最早調用複寫的 onSubscribe()

            @Override
            public void onNext(Integer value) {
                Log.d(TAG, "處理事件"+ value   );
            }

            @Override
            public void onError(Throwable e) {
                Log.d(TAG, "處理事件"+ value   );
            }
            }

            @Override
            public void onComplete() {
               Log.d(TAG, "事件完成.不在接收任何事件"  );
            }
            }
        };
  • 經過訂閱(Subscribe)鏈接觀察者和被觀察者
observable.subscribe(observer);

2.基於事件流鏈式方式

Observable.create(new ObservableOnSubscribe<Integer>() {
        // 1. 建立被觀察者 & 生產事件
            @Override
            public void subscribe(ObservableEmitter<Integer> emitter) throws Exception {
                emitter.onNext(1);
                emitter.onNext(2);
                emitter.onNext(3);
                emitter.onComplete();
            }
        }).subscribe(new Observer<Integer>() {
            // 2. 經過經過訂閱(subscribe)鏈接觀察者和被觀察者
            // 3. 建立觀察者 & 定義響應事件的行爲
            @Override
            public void onSubscribe(Disposable d) {
                Log.d(TAG, "開始採用subscribe鏈接");
            }
            // 默認最早調用複寫的 onSubscribe()

            @Override
            public void onNext(Integer value) {
                Log.d(TAG, "處理事件"+ value   );
            }

            @Override
            public void onError(Throwable e) {
                Log.d(TAG, "處理Error事件,再也不接收事件");
            }

            @Override
            public void onComplete() {
                Log.d(TAG, "處理Complete事件,再也不接收事件");
            }

        });
    }
  • 中斷鏈接關係

觀察者 沒法繼續 接收 被觀察者的事件,但被觀察者仍是能夠繼續發送事件react

// 主要在觀察者 Observer中 實現
        Observer<Integer> observer = new Observer<Integer>() {
            // 1. 定義Disposable類變量
            private Disposable mDisposable;

            @Override
            public void onSubscribe(Disposable d) {
                Log.d(TAG, "開始採用subscribe鏈接");
                // 2. 對Disposable類變量賦值
                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事件");     //沒法收到Error事件了
            }

            @Override
            public void onComplete() {
                Log.d(TAG, "處理Complete事件");//沒法收到Complete事件了
            }
        };

總結

  • Rxjava原理 基於 一種擴展的觀察者模式

被觀察者 (Observable) 經過 訂閱(Subscribe) 按順序發送事件 給觀察者 (Observer), 觀察者(Observer) 按順序接收事件 以及做出對應的響應動做android


  • 被觀察者(Observable) 產生事件
  • 觀察者(Observer) 接收事件,並給出響應動做
  • 訂閱(Subscribe) 鏈接 被觀察者 & 觀察者
  • 事件(Event) 被觀察者 & 觀察者 鏈接的橋樑

至此,Rxjava的基本介紹和使用就完成了,感謝閱讀segmentfault

參考文章:

Android Rxjava:這是一篇 清晰 & 易懂的Rxjava 入門教程異步

歡迎關注做者darryrzhong,更多幹貨等你來拿喲.ide

請賞個小紅心!由於你的鼓勵是我寫做的最大動力!

更多精彩文章請關注
相關文章
相關標籤/搜索