RxJava學習筆記2

上一篇RxJava學習筆記1只是介紹了RxJava最基本的使用方法,但是RxJava核心是異步,上篇所有的操作默認是在同一個線程中進行操作,下面我們介紹RxJava中一個比較核心的概念:


Scheduler ->>>>>>用於線程調度
不指定線程的情況下, RxJava 原則是運行在同一個線程裏,

即:在調用 subscribe()的線程中,生產事件,消費事件。
如果需要指定線程,就需要用到 Scheduler (線程調度器)。

系統已經內置了幾個調度器,能夠完成大部分的線程調度工作

Schedulers.immediate(): 直接在當前線程運行,相當於不指定線程。這是默認的 Scheduler。

Schedulers.newThread(): 每次都啓動新線程,在新線程執行。

Schedulers.io(): I/O 操作(讀寫文件、讀寫數據庫、網絡信息交互等)。

行爲模式和 newThread() 差不多,區別在於 io() 的內部實現是是用一個無數量上限的線程池,可以重用空閒的線程,因此多數情況下 io() 比 newThread() 更有效率。不要把計算工作放在 io() 中,可以避免創建不必要的線程。

Schedulers.computation(): 計算所使用的 Scheduler。這個計算指的是 CPU 密集型計算,即不會被 I/O 等操作限制性能的操作,
例如圖形的計算。這個 Scheduler 使用的固定的線程池,大小爲 CPU 核數。不要把 I/O 操作放在 computation() 中,否則 I/O 操作的等待時間會浪費 CPU。

Android 還有一個專用的 AndroidSchedulers.mainThread(),它指定的操作將在 Android 主線程運行。


線程控制的兩個方法:

subscribeOn() 指定 subscribe() 所發生的線程,即 Observable.OnSubscribe 被激活時所處的線程。或者叫做事件產生的線程。

observeOn() 指定 Subscriber 所運行在的線程。或者叫做事件消費的線程。

//示例代碼
Observable.just(T t)
          .subscribeOn(Schedulers.io()) // 指定 subscribe() 發生在 IO 線程
          .observeOn(AndroidSchedulers.mainThread()) // 指定 Subscriber 的回調發生在主線程
          .subscribe(new Action1<T t>() { public void call(T t) {}});
//這是很常見的一個操作 
//例如 我們從後臺聯網獲取數據 然後成功之後在主線程中對界面進行UI顯示

線程的調度使用就是這麼簡單,至於原理請看下一張

發佈了36 篇原創文章 · 獲贊 5 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章