Android RxJava的基本使用一

介紹:

在GitHub主頁上的介紹:

a library for composing asynchronous and event-based programs using observable sequences for the Java VM

意思就是

一個在 Java VM 上使用可觀測的序列來組成異步的、基於事件的程序的庫

優點
隨着代碼變得越來越多越來越複雜,RxJava 依舊可以使邏輯代碼看起來很簡潔

什麼是觀察者模式
被觀察者:被觀察的對象,某個狀態發生改變時會通知觀察者
觀察者: 監視被觀察者的行爲,被觀察者有狀態變化的時候會通知觀察者,觀察者會執行相應的操作
訂閱: 用來將觀察者與被觀察者建立聯繫

舉個例子
觀察者相當於警察,被觀察者是小偷,警察通過監控器觀察小偷的行爲,發現他有偷東西的動作時會行動抓 他,通過監控器將他們兩個的行爲聯繫起來

RxJava

RxJava中的三個角色進行一下角色分配

觀察者:Observer;
被觀察者:Observable;
訂閱(或註冊):subscribe()。

觀察者
Observer即觀察者,它決定事件觸發的時候將有怎樣的行爲
RxJava Observer事件回調方法,除了onNext(),還有onCompleted(),onError();

onCompleted(): 事件隊列完結。RxJava 不僅把每個事件單獨處理,還會把它們看做一個隊列。RxJava 規定,當不會再有新的onNext()發出時,需要觸發onCompleted()方法作爲標誌。
onError(): 事件隊列異常。在事件處理過程中出異常時,onError()
會被觸發,同時隊列自動終止,不允許再有事件發出。
在一個正確運行的事件序列中,onCompleted()和onError()有且只有一個,並且是事件序列中的最後一個。需要注意的是,onCompleted()
和onError()二者也是互斥的,即在隊列中調用了其中一個,就不應該再調用另一個。

被觀察者
Observable即被觀察者,它決定事件什麼時候被觸發以及觸發時候將有怎樣的行爲可以使用create()、just(T…)、from(T[])來創建一個 Observable ,併爲它定義事件觸發規則。

訂閱
創建了Observable和Observer之後,再用subscribe()方法將它們聯結起來

使用

添加依賴

compile 'io.reactivex:rxjava:1.0.14'
compile 'io.reactivex:rxandroid:1.0.1'

創建一個觀察者對象

 Observer<String> observer = new Observer<String>() {
            @Override
            public void onCompleted() {
                Logger.d("onCompleted");
            }

            @Override
            public void onError(Throwable e) {
                Logger.d("onError");
            }

            @Override
            public void onNext(String s) {
                Logger.d("onNext");
            }
        };

創建一個被觀察者

 Observable<String> observable = Observable.create(new Observable.OnSubscribe<String>() {
            @Override
            public void call(Subscriber<? super String> subscriber) {
                subscriber.onNext("Hello");
                subscriber.onNext("World");
                subscriber.onCompleted();
            }
        });

訂閱

  observable.subscribe(observer);

Subscriber
除了Observer接口之外,RxJava 還內置了一個實現了Observer的抽象:Subscriber。Subscriber對Observer接口進行了一些擴展,但他們的基本使用方式是完全一樣的:

 Subscriber<String> subscriber = new Subscriber<String>() {
            @Override
            public void onCompleted() {
                Logger.d("onCompleted");
            }

            @Override
            public void onError(Throwable e) {
                Logger.d("onError");
            }

            @Override
            public void onNext(String s) {
                Logger.d("onNext");
            }

            @Override
            public void onStart() {
                super.onStart();
            }

        };

所以如果你只想使用基本功能,選擇Observer和Subscriber是完全一樣的。它們的區別對於使用者來說主要有兩點:

onStart(): 這是Subscriber增加的方法。它會在 subscribe 剛開始,而事件還未發送之前被調用,可以用於做一些準備工作,例如數據的清零或重置。這是一個可選方法,默認情況下它的實現爲空。需要注意的是,如果對準備工作的線程有要求(例如彈出一個顯示進度的對話框,這必須在主線程執行),onStart()就不適用了,因爲它總是在 subscribe 所發生的線程被調用,而不能指定線程。要在指定的線程來做準備工作,可以使用doOnSubscribe()方法,具體可以在後面的文中看到。
unsubscribe(): 這是Subscriber所實現的另一個接口Subscription
的方法,用於取消訂閱。在這個方法被調用後,Subscriber將不再接收事件。一般在這個方法調用前,可以使用isUnsubscribed()先判斷一下狀態。unsubscribe()這個方法很重要,因爲在subscribe()之後,Observable會持有Subscriber的引用,這個引用如果不能及時被釋放,將有內存泄露的風險。所以最好保持一個原則:要在不再使用的時候儘快在合適的地方(例如onPause()onStop()等方法中)調用unsubscribe()來解除引用關係,以避免內存泄露的發生。

Observable其他幾種創建方式

1、使用Observable.just()創建被觀察者

 Observable observable = Observable.just("Hello", "World");

2、使用Observable.from()創建被觀察者

   String[] words = {"Hello", "World"};
   Observable observable1 = Observable.from(words);

或者

List<String> list = new ArrayList<String>();
list.add("Hellow");
list.add("Wrold");
Observable observable4 = Observable.from(list);
發佈了26 篇原創文章 · 獲贊 18 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章