RxJava的導讀(一)

前言:

隨着技術跟實現方式的突飛猛進,做爲程序猿的咱們,要麼選擇緊跟時代潮流,要麼選擇?帶,可是我不會這麼輕易的?帶,畢竟我這麼帥!哈哈,今天給你們帶來的是關於RxJava的文章,不是心靈雞湯,不過味道不錯!《給 Android 開發者的 RxJava 詳解》這是大神的原文,我將其分解並加入一些本身的理解,幫助你們更好的理解使用java

正文:

首先在Android Studio中加入RxJava支持方式:
build.gradle中加入微信

clipboard.png
而後記得
clipboard.png
這樣所需的jar就有了。異步

基本概念:

何爲RxJava:(一個在 Java VM 上使用可觀測的序列來組成異步的、基於事件的程序的庫)。ide

RxJava的優點:簡潔(一條鏈式調用,結構比較清晰)post

RxJava使用的是一種擴展的觀察者模式:
RxJava 有四個基本概念:Observable (可觀察者,即被觀察者)、 Observer (觀察者)、 subscribe (訂閱)、事件
ObservableObserver 經過 subscribe() 方法實現訂閱關係,從而 Observable 能夠在須要的時候發出事件來通知Observer學習

與傳統觀察者模式(相似給button註冊OnClickListener的方式)不一樣, RxJava 的事件回調方法除了普通事件 onNext() (至關於 onClick() / onEvent())以外,還定義了兩個特殊的事件:onCompleted()onError()gradle

onCompleted(): 事件隊列完結。 ui

onError(): 事件隊列異常。spa

基本實現:

根據上面的概念,咱們能夠知道,主要有三個步驟,
1) 建立 Observer(觀察者)code

Observer 即觀察者,它決定事件觸發的時候將有怎樣的行爲。 RxJava 中的 Observer 接口的實現方式(這裏稍微描述一下:被觀察者只負責發送通知,要作事情的順序,跟內容,真正作事情就是觀察者的onNext方法,作完以後執行onCompleted方法)

Observer<String> observer = new Observer<String>() {
    @Override
    public void onNext(String s) {
        Log.d(tag, "Item: " + s);
    }

    @Override
    public void onCompleted() {
        Log.d(tag, "Completed!");
    }

    @Override
    public void onError(Throwable e) {
        Log.d(tag, "Error!");
    }
};

RxJava 還內置了一個實現了 Observer 的抽象類:Subscriber。 (一開始看,跟訂閱的動做subscribe()很像,感受名字有點眼花,問了土豪以後,原來英文解釋就好接受多了:
Observer 觀察者 Subscriber訂閱者 訂閱者有些特殊的要求,因此對前者擴展後,使用更方便,主要體如今onStart()事件發送前執行,和unsubscribe()取消訂閱兩個方法)
SubscriberObserver 接口進行了一些擴展,但他們的基本使用方式是徹底同樣的:

Subscriber<String> subscriber = new Subscriber<String>() {
    @Override
    public void onNext(String s) {
        Log.d(tag, "Item: " + s);
    }

    @Override
    public void onCompleted() {
        Log.d(tag, "Completed!");
    }

    @Override
    public void onError(Throwable e) {
        Log.d(tag, "Error!");
    }
};

2) 建立 Observable(被觀察者)
Observable 即被觀察者,它決定何時觸發事件以及觸發怎樣的事件。 RxJava 使用 create() 方法來建立一個 Observable ,併爲它定義事件觸發規則:

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

這個被觀察者上面的代碼,其實能夠理解爲一個任務計劃,當開始被訂閱(Subscribe)的時候,這裏能夠理解訂閱就是開始執行任務清單,而後觀察者就一個個的把任務完成的邏輯。這個任務計劃,也有簡化寫法以下:(just(T...)from(T[]) )

//    被觀察者
//    Observable observable = Observable.create(new Observable.OnSubscribe<String>() {
//        @Override
//        public void call(Subscriber<? super String> subscriber) {
//            subscriber.onNext("Hello");
//            subscriber.onNext("Hi");
//            subscriber.onNext("Aloha");
//            subscriber.onCompleted();
//        }
//    });

//    //等效以上寫法
//    Observable observable = Observable.just("Hello", "Hi", "Aloha");

    //等效以上寫法
    String[] words = {"Hello", "Hi", "Aloha"};
    Observable observable = Observable.from(words);

3) Subscribe (訂閱)
建立了 ObservableObserver 以後,再用 subscribe() 方法將它們聯結起來,整條鏈子就能夠工做了。(能夠理解爲被觀察者的任務計劃表開始派給觀察者,並執行任務)
以下代碼:(組合寫法一就是相似內部匿名類的寫法,一開始看不容易看,你瞭解了分離寫法的結構的時候,就比較好看了)

/**
     * 練習Rxjava
     */
    private void practiceRxjava() {
//        1.組合寫法:
//        Observable.create(new Observable.OnSubscribe<String>() {
//            @Override
//            public void call(Subscriber<? super String> subscriber) {
//                subscriber.onNext("hello");
//            }
//        }).subscribe(new Subscriber<String>() {
//            @Override
//            public void onCompleted() {
//
//            }
//
//            @Override
//            public void onError(Throwable e) {
//
//            }
//
//            @Override
//            public void onNext(String s) {
//                Log.d("rx", s);
//            }
//        });

//        2.分離寫法:
        observable.subscribe(observer);
    }

這樣就能夠獲得以下打印信息:

clipboard.png
自此總體的流程算是走通了(若是想知道爲何能夠這麼走通,請自行查看源碼中的規則,這裏只講述用法。)

總結:

這篇文章是對《給 Android 開發者的 RxJava 詳解》的導讀,吃飯要一口一口的吃,這樣理解起來也更順暢一些,不過關鍵的仍是要本身去親自code驗證,別人說的再好,也只有本身嘗試用了纔會發現好處,否則只是別人的,不會是本身的。該文章較長,因此分爲多篇,我將跟你們一塊兒學習,並幫助你們理解。最後奉上個人我的技術訂閱號,鏘哥的覺悟,微信號:DY_suixincq個人博客最新文章會在這裏同步推出,歡迎關注交流

相關文章
相關標籤/搜索