RxJava的簡單介紹

1. RxJava是什麼?

一個詞歸納:異步

2. RxJava的好處

一個詞歸納:簡潔。隨着程序邏輯變得愈來愈複雜,它依然可以保持簡潔。

3. API介紹和原理解析

3.1 概念:擴展的觀察者模式
RxJava的異步實現,是經過一種擴展的觀察者模式來實現的。
3.2 RxJava的觀察者模式
RxJava有四個基本概念:
1. Observable:可觀察者,即被觀察者
2. Observer:觀察者
3. subscribe:訂閱
4. 事件

Observable和Observer經過subscribe()方法實現訂閱關係,從而Observable能夠在須要的時候發出事件來通知Observerjava

與傳統的觀察者模式不一樣,RxJava的事件回調方法除了普通事件 onNext()(至關於onClick()/onEvent())以外,還定義了兩個特殊事件:onCompleted()和onError()。數據庫

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

RxJava的實現基本有三點:api

1. 建立Observer
2. 建立Observable
3. Subscribe(訂閱)
3.4 線程控制——Scheduler(一)

在不指定線程的狀況下, RxJava 遵循的是線程不變的原則,即:在哪一個線程調用 subscribe(),就在哪一個線程生產事件;在哪一個線程生產事件,就在哪一個線程消費事件。若是須要切換線程,就須要用到 Scheduler (調度器)。網絡

3.4.1 Scheduler 的 API (一)
  • Schedulers.immediate(): 直接在當前線程運行,至關於不指定線程。這是默認的 Scheduler。
  • Schedulers.newThread(): 老是啓用新線程,並在新線程執行操做。
  • Schedulers.io(): I/O 操做(讀寫文件、讀寫數據庫、網絡信息交互等)所使用的 Scheduler。行爲模式和 newThread() 差很少,區別在於 io() 的內部實現是是用一個無數量上限的線程池,能夠重用空閒的線程,所以多數狀況下 io() 比 newThread() 更有效率。不要把計算工做放在 io() 中,能夠避免建立沒必要要的線程。
  • Schedulers.computation(): 計算所使用的 Scheduler。這個計算指的是 CPU 密集型計算,即不會被 I/O 等操做限制性能的操做,例如圖形的計算。這個 Scheduler 使用的固定的線程池,大小爲 CPU 核數。不要把 I/O 操做放在 computation() 中,不然 I/O 操做的等待時間會浪費 CPU。
  • 另外, Android 還有一個專用的 AndroidSchedulers.mainThread(),它指定的操做將在 Android 主線程運行。

有了這幾個 Scheduler ,就可使用 subscribeOn() 和 observeOn() 兩個方法來對線程進行控制了。 * subscribeOn(): 指定 subscribe() 所發生的線程,即 Observable.OnSubscribe 被激活時所處的線程。或者叫作事件產生的線程。 * observeOn(): 指定 Subscriber 所運行在的線程。或者叫作事件消費的線程。異步

相關文章
相關標籤/搜索