源碼解析,如需轉載,請註明做者:Yuloran (t.cn/EGU6c76)html
前言
造輪子者:Season_zlc編程
本篇概述 RxDownload2 主要功能及對應的技術要點服務器
主要功能
- 使用 Retrofit+OKHTTP 來進行網絡請求
- 基於 RxJava 打造,支持 RxJava 各類操做符鏈式調用
- 斷點續傳,根據服務端響應值自動判斷是否支持斷點續傳
- 若不支持斷點續傳,則進行傳統下載
- 多線程下載,能夠設置最大線程,, 默認值爲 3
- 檢測到網絡鏈接失敗自動嘗試重連,, 並可配置最大重試次數,默認值爲 3
- 支持根據 Last-Modified 字段判斷服務端文件是否變化
- 與服務器進行驗證過程當中,使用更輕便的 HEAD 請求方式僅獲取響應頭,減輕服務端負擔
技術淺析
- Android & Java 平臺的網絡請求框架,賊好用
- 基於事件序列編程的框架,賊好用
- Http 協議的 HEAD 方法,攜帶 "Range" 請求頭,值爲 "bytes=0-",判斷響應頭是否包含 "Content-Range"
- 下載中斷後,只能從新下載
- 這裏指服務器支持斷點續傳時,可同時開啓幾個線程去下載一個文件。而同時下載的最大任務數,是由信號量控制的
- RxJava 的 retry 操做符
- Http 協議的 "Last-Modified" 響應頭和 "If-Modified-Since" 請求頭
- Http 協議的 HEAD 方法,檢測服務器文件是否修改、服務器是否支持斷點下載、保存文件長度都是 HEAD 請求(響應很是快)。實際使用時,要看本身的服務器是否支持 HEAD 請求,咱們的服務器就不支持!(正在定位解決...)
優勢
- 源碼變量命名、縮進風格統一
- 英文註釋、註釋習慣同 Android 原生
- 類的職責單一,很是好!
- RxJava 用的很是 6!
- 源碼很精簡,方便閱讀
- 做者明明是大佬,卻很謙虛!去年就所有換成 Kotlin 了!
缺點
- 下載狀態封裝的很差,跟上游綁定在一塊兒,沒法直接判斷收到的狀態是哪一個對象的
附
RxDownload2 系列文章:網絡