1. 程式人生 > >RxDownload2 原始碼解析(一)

RxDownload2 原始碼解析(一)

原始碼解析,如需轉載,請註明作者:Yuloran (t.cn/EGU6c76)

前言

造輪子者:Season_zlc

本篇概述 RxDownload2 主要功能及對應的技術要點

主要功能

  1. 使用 Retrofit+OKHTTP 來進行網路請求
  2. 基於 RxJava 打造,支援 RxJava 各種操作符鏈式呼叫
  3. 斷點續傳,根據服務端響應值自動判斷是否支援斷點續傳
  4. 若不支援斷點續傳,則進行傳統下載
  5. 多執行緒下載,可以設定最大執行緒,, 預設值為 3
  6. 檢測到網路連線失敗自動嘗試重連,, 並可配置最大重試次數,預設值為 3
  7. 支援根據 Last-Modified 欄位判斷服務端檔案是否變化
  8. 與伺服器進行驗證過程中,使用更輕便的 HEAD 請求方式僅獲取響應頭,減輕服務端負擔

技術淺析

  1. Android & Java 平臺的網路請求框架,賊好用
  2. 基於事件序列程式設計的框架,賊好用
  3. Http 協議的 HEAD 方法,攜帶 "Range" 請求頭,值為 "bytes=0-",判斷響應頭是否包含 "Content-Range"
  4. 下載中斷後,只能重新下載
  5. 這裡指伺服器支援斷點續傳時,可同時開啟幾個執行緒去下載一個檔案。而同時下載的最大任務數,是由訊號量控制的
  6. RxJava 的 retry 操作符
  7. Http 協議的 "Last-Modified" 響應頭和 "If-Modified-Since" 請求頭
  8. Http 協議的 HEAD 方法,檢測伺服器檔案是否修改、伺服器是否支援斷點下載、儲存檔案長度都是 HEAD 請求(響應非常快)。實際使用時,要看自己的伺服器是否支援 HEAD 請求,我們的伺服器就不支援!(正在定位解決...)
    伺服器HEAD請求返回403

優點

  • 原始碼變數命名、縮排風格統一
  • 英文註釋、註釋習慣同 Android 原生
  • 類的職責單一,非常好!
  • RxJava 用的非常 6!
  • 原始碼很精簡,方便閱讀
  • 作者明明是大佬,卻很謙虛!去年就全部換成 Kotlin 了!

缺點

  • 下載狀態封裝的不好,跟上游繫結在一起,無法直接判斷收到的狀態是哪個物件的