隨着技術跟實現方式的突飛猛進,做爲程序猿的咱們,要麼選擇緊跟時代潮流,要麼選擇?帶,可是我不會這麼輕易的?帶,畢竟我這麼帥!哈哈,今天給你們帶來的是關於RxJava
的文章,不是心靈雞湯,不過味道不錯!《給 Android 開發者的 RxJava 詳解》這是大神的原文,我將其分解並加入一些本身的理解,幫助你們更好的理解使用java
首先在Android Studio
中加入RxJava
支持方式:
在build.gradle
中加入微信
而後記得
這樣所需的jar
就有了。異步
何爲RxJava
:(一個在 Java VM
上使用可觀測的序列來組成異步的、基於事件的程序的庫)。ide
RxJava
的優點:簡潔(一條鏈式調用,結構比較清晰)post
RxJava
使用的是一種擴展的觀察者模式:RxJava
有四個基本概念:Observable
(可觀察者,即被觀察者)、 Observer
(觀察者)、 subscribe
(訂閱)、事件
。Observable
和Observer
經過 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()
取消訂閱兩個方法)Subscriber
對 Observer
接口進行了一些擴展,但他們的基本使用方式是徹底同樣的:
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
(訂閱)
建立了 Observable
和 Observer
以後,再用 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); }
這樣就能夠獲得以下打印信息:
自此總體的流程算是走通了(若是想知道爲何能夠這麼走通,請自行查看源碼中的規則,這裏只講述用法。)
這篇文章是對《給 Android 開發者的 RxJava 詳解》的導讀,吃飯要一口一口的吃,這樣理解起來也更順暢一些,不過關鍵的仍是要本身去親自code驗證,別人說的再好,也只有本身嘗試用了纔會發現好處,否則只是別人的,不會是本身的。該文章較長,因此分爲多篇,我將跟你們一塊兒學習,並幫助你們理解。最後奉上個人我的技術訂閱號,鏘哥的覺悟,微信號:DY_suixincq
個人博客最新文章會在這裏同步推出,歡迎關注交流