拆轮子-RxDownload2源码解析(一)

本文为博主原创文章,未经允许不得转载

造轮子者: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请求,我们的服务器就不支持!(正在定位解决...)


    2722938-770b139d06debeb5.png
    服务器HEAD请求返回403

优点

  • 源码变量命名、缩进风格统一
  • 英文注释、注释习惯同Android原生
  • 类的职责单一,非常好!
  • RxJava用的非常6!
  • 源码很精简,方便阅读
  • 作者明明是大佬,却很谦虚!去年就全部换成Kotlin了!


    2722938-dfa6107d3f21f3a4.png

缺点

  • 下载状态封装的不好,跟上游绑定在一起,无法直接判断收到的状态是哪个对象的(不过这就是作者的设计思路)

此时的我

2722938-89bdc5953a89ee92.png
图片侵权请联系本人删除
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值