源码解析,如需转载,请注明做者: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 系列文章:网络