RxDownload2 源碼解析(一)

源碼解析,如需轉載,請註明做者:Yuloran (t.cn/EGU6c76)html

前言

造輪子者: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 了!

缺點

  • 下載狀態封裝的很差,跟上游綁定在一塊兒,沒法直接判斷收到的狀態是哪一個對象的

RxDownload2 系列文章:網絡

相關文章
相關標籤/搜索