1. 程式人生 > >最最基礎的android使用RxJava介紹

最最基礎的android使用RxJava介紹

        很久很久以前,就看了各種介紹RxJava的文章,網上最出名的也看過了,但還是處於一知半解狀態,最近再看,決定實踐Talk is cheap,show me code。以程式碼說話,這樣也會更容易理解。

        首先還是介紹一下主角RxJava吧,百度百科的說法:RxJava是用於使用Java VM的可觀察序列編寫非同步和基於事件的程式的庫。別問我這句話怎麼理解,或是什麼意思,我也說不清楚。套用網上著名文章(給Android 開發者的 RxJava 詳解)裡的說法:RxJava的本質可以壓縮為非同步這一個詞,說到根上,它就是一個實現非同步操作的庫。

        RxJava核心思想就是觀察者模式,對於觀察者模式,也是研究了好幾次,先給出解釋:

觀察者模式(有時又被稱為模型-檢視(View)模式、源-收聽者(Listener)模式或從屬者模式)
是軟體設計模式的一種。在此種模式中,一個目標物件管理所有相依於它的觀察者物件,
並且在它本身的狀態改變時主動發出通知。這通常透過呼叫各觀察者所提供的方法來實現。
此種模式通常被用來實現事件處理系統。

根據特定場景來理解這些名詞是最通俗的辦法 ,觀察者模式涉及兩種身份,觀察者和被觀察者,你可以想象,你自己(碼神、碼農、碼畜、程式猿、程式媛)就是觀察者,產品需求說明書是被觀察者。你是需要根據開發需求說明書來幹活的,這關係到身家性命,所以你要觀察它。但是 ,說明書是產品部門給出的,你不能知道他們什麼時候會出來。放心,產品部門有新的功能會迫不及待告訴你的。這時候,被觀察者有更新,就會發送通知給觀察者。大概就是這麼個意思。

        程式碼解釋一切:

開始開發前,工具還是要齊全的:新增依賴

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

第一步:建立被觀察者

Observable productDoc = Observable.create(new ObservableOnSubscribe<String>() {
            @Override
            public void subscribe(ObservableEmitter<String> e) throws Exception {
                e.onNext("需求文件版本1.0");
                e.onNext("需求文件版本2.0");
                e.onNext("需求文件版本3.0");
                e.onComplete();
            }
        });

第二步:建立觀察者

Observer<String> programmer = new Observer<String>() {
            @Override
            public void onSubscribe(Disposable d) {
                Log.e(TAG,"onSubscribe");
            }

            @Override
            public void onNext(String value) {
                Log.e(TAG,"onNext:"+value);
            }

            @Override
            public void onError(Throwable e) {
                Log.e(TAG,"onError="+e.getMessage());
            }

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

第三步:建立訂閱關係

productDoc.subscribe(programmer);

至於第三步為什麼是產品需求文件訂閱了程式設計師,這個似乎是RxJava內部實現被迫如此,有了解的讀者可以評論,我也漲漲見識。

執行結果如下:

至此,這個超級簡單的RxJava呼叫完成了。

注:文章肯定有很多寫的不好的地方,可能在理解上還會出現錯誤或偏差,只是想將這種思想記錄下來,供大家理解,歡迎評論!