RxJava線程控制(切換/調度)的作用是什麼
指定 被觀察者
Observer
/ 觀察者Observer
的工作線程類型.
爲什麼要進行RxJava線程控制(調度/切換)
- 背景:被觀察者 和 觀察者 的工作線程=創建自身的線程
若被觀察者
Observable
/ 觀察者Observe
在主線程被創建,那麼他們的工作(生產事件/接受&響應事件)就會發生在主線程。
- 衝突:一般的需求場景,需要在子線程中實現耗時的操作,然後回到主線程完成
UI
操作
被觀察者
Observable
在子線程 中產生事件 (如實現耗時操作等等)
觀察者Observer
在主線程 中接受&響應事件(即實現UI
操作)
- 解決方案:爲了解決以上衝突,實現真正的異步操作,我們需要對
RxJava
進行線程控制
實現方式
採用RxJava
內置的線程調度器Schduler
,即通過 功能性操作符 subscribeOn()
& observeOn()
實現
-
操作符介紹
這兩種操作符用於線程控制,指定被觀察者和觀察者的工作線程類型
-
線程類型:在
RxJava
中,內置了多種用於調度的線程類型類型 含義 應用場景 Schedulers.immediate() 當前線程 = 不指定線程 默認 AndroidSchedulers.mainThread() Android主線程 操作UI Schedulers.newThread() 常規新線程 耗時等操作 Schedulers.io() IO操作線程 網絡請求、IO密集型操作 Schedulers.computation() CPU計算操作線程 大量計算操作 -
代碼實例
<-- 使用說明 --> // Observable.subscribeOn():指定被觀察者 發送事件的線程(傳入RxJava內置的線程類型) // Observable.observeOn():指定觀察者 接收&響應事件的線程(傳入RxJava內置的線程類型) <-- 實例使用 --> // 通過訂閱(subscribe)連接觀察者和被觀察者 observable.subscribeOn(Schedulers.newThread()) //① .observeOn(AndroidSchedulers.mainThread()) //② .subscribe(observer); //③ // ①指定被觀察者 生產事件的線程 // ②指定觀察者 接收 & 響應事件的線程 // ③最後再通過訂閱(subscribe)連接觀察者和被觀察者
-
特別注意
- 若
Observable.subscribeOn()
多次指定被觀察者生產事件的線程,則只有第一次指定有效,其餘的指定線程無效 - 若
Observable.observeOn()
多次指定觀察者 接受&響應事件的線程,則每次指定均有效,即每指定一次,就會進行一次線程的切換
- 若