FileDownlaoder下载框架

FileDownlaoder

  • 支持多任务下载
  • 支持多线程下载
  • 支持 断点续传
  • 使用URLConnection

FileDownloader的基本使用

此处引用自FileDownloader单任务多任务简单使用

源码分析

1. singleTask

  • 初始化:url:本地存储路径、进度刷新时间间隔、任务状态监听。
  • 调用任务start():创建该任务对象锁、任务初始化、并返回任务ID(由url和本地保存路径一起生成的MD5的hashcode )。
  • 创建任务:判断当前任务是否已经在任务队列中;
  • 将任务加入到线程池中。
  • 线程池为自定义的,默认核心线程与最大线程为3,使用LinkedBlockingQueue< Runnable>队列。

2. 多任务下载

就是将每个任务添加到单任务类型的数组中,设置串行还是并行下载、、失败重试次数、启动任务start()就是循环遍历任务数组。

3. 如何实现多线程下载功能?

(后续都假设1个文件启动3个线程去下载)先起一个初始线程(initThread)去查询目标下载文件的基本信息比如文件长度等,生成对应本地文件。计算每个下载线程(DownloadThread)的下载长度和下载起始结束点,通过线程池启动3个下载线程进行下载并写入到本地文件的对应起始点中,当3个下载线程都下载完成后,这个文件就下载完整了。

OkDownload

OkDownload是一个android下载框架,是FileDownloader的升级版本,也称FileDownloader2;是一个支持多线程,多任务,断点续传,可靠,灵活,高性能以及强大的下载引擎。

Android OkDownload的使用

此处引用自Android OkDownload的使用

  • 使用 okHttp

android自定义实现断点续传

此处引用自android自定义实现断点续传

技术点

  1. 获取下载所配置的信息类
  • 本地初始化一个下载信息DownloaderInfor,包括url、存储地址、下载线程数等,保存到本地数据库中。
  1. 获取下载的文件总长度
  • 若为第一次下载,通过get()方法获取文件长度,在头部信息中有contentLength信息(文件byte长度),保存到本地数据库中。
  • 若不是第一次,则到本地数据库中查询文件信息,包括配置信息类、文件长度、每块下载的起止点(可能是多线程下载同一文件)、已完成size()。
  1. 开始下载
  • 根据下载信息开启线程进行下载。
  • 通过请求头设置欲下载的起止范围。
    // 设置范围,格式为Range:bytes x-y;
     connection.setRequestProperty("Range", "bytes="+(startPos + compeleteSize) + "-" + endPos);
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值