架構師學習--rxjava線程切換

比如有這麼一個需求:網絡上下載一張圖片,然後顯示在界面上。常規的做法可能就是開一個子線程負責網絡圖片的下載,得到圖片後,通過Handler發送到UI線程進行界面的更新。這樣寫,當然也沒有問題,但是,這樣會顯得代碼四分五裂,可讀性不是很強。但是通過rxjava的鏈式調用以及線程切換,這樣的需求同樣能夠實現,並且代碼的閱讀性很強。

一、線程模式

1、四種線程模式
  • Schedulers.io(): io流操作,網絡操作,文件流,耗時操作等異步操作
  • Schedulers.newThread():比較常規的異步線程
  • Schedulers.computation():需要cpu大量計算的線程
  • AndroidSchedulers.mainThread():專供android切換到主線程

以上4種模式,io()和mainThread()模式是比較常用的。下面代碼測試上游和下游線程的切換

2、線程切換

測試代碼如下:
在這裏插入圖片描述
代碼中上游多次切換線程,下游也多次切換線程。測試結果如下:
在這裏插入圖片描述
結果發現,上游保持在主線程,下游也在主線程。所以可以得出2個結論:

  • 上游線程切換,可以切換多次,以第一次爲準;下游線程切換,可以切換多次,以最後一次爲準。
  • 上游使用 subscribeOn() 切換線程,下游使用 observeOn() 切換線程。

二、網絡下載圖片

瞭解到線程切換的原理,下面使用rxjava實現網絡下載圖片,並且顯示到UI界面上。

1、圖片地址

在這裏插入圖片描述

2、rxjava下載、並顯示圖片

在這裏插入圖片描述
使用過程中需要將上游切換到異步線程,下載完成後,需要將下游線程切換到主線程,最後在onNext()方法中顯示圖片。

3、網絡下載圖片代碼

在這裏插入圖片描述

4、測試結果如下:

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章