RxJava線程切換

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()多次指定觀察者 接受&響應事件的線程,則每次指定均有效,即每指定一次,就會進行一次線程的切換
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章