Android多任务断点下载
发布日期:2021-10-04 02:53:18 浏览次数:3 分类:技术文章

本文共 1955 字,大约阅读时间需要 6 分钟。

项目中有一个多任务下载模块,使用的是第三方的一个下载模块Afinal框架,感觉也不是很好用,所以呢,就自己打算自己写一个,写了才发现,为什么到目前为止还没有一个很好用的下载SDK,说多了都是泪……………………..

先上两张效果图。。。。
这里写图片描述 这里写图片描述

这里下载是使用HttpURLConnection这个工具类来完成的,在下载文件方面HttpURLConnection要比HttpClicent好些,快速些。

这里的原理非常简单,多个任务的开多个线程去获取数据,使用流写入本地,并且记录每次写的数据长度,以便下次进来进行下载恢复。

项目中所涉及到的一些类有:DownBase,DownLinsener,DownloadConfig,DownloadManager,DownloadThread,MutilDownFile,DownloadInfo。

这里写图片描述
DownBase:基类,DownloadManager和MutilDownFile都继承与该基类。
DownLinsener:下载监听类,包括成功,失败,下载进度,下载最大值,下载速率。
DownloadConfig:下载配置类,自动下载的最大线程数,和下载文件存放地址。
DownloadManager:下载管理器。
DownloadThread:下载器。
MutilDownFile:下载管理类。
DownloadInfo:下载信息实体。


DownBase基类

这里写图片描述

该类主要负责一些全局的数据储存,方便Downmanager和MutilDownFile数据分享。

DownLinsener监听类

这里写图片描述

该类负责监听下载状态,数据传递。

DownloadConfig配置类

这里写图片描述

这里配置自动下载的最大任务数,和下载保存的地址。

DownloadManager下载管理类

核心代码:比较懒,直接截图记录!!!!

这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这个类主要是管理下载,根据任务id和任务下载地址初始化一个下载的Downloadinfo,并且传入下载监听Downlinsener。

在download中,

1,根据下载地址判断,该下载文件是否存在,存在的话拿到该文件的大小Filesize和文件名称;
2,判断数据库中是否已经下载过来该下载文件;不存在添加一个记录,否则读取已经下载的数据量长度ecistlenght;
3,在本地指定的文件夹中使用RandomAccessFile创建一个大小Filesize和服务器一样大小的文件;
4,然后根据线程数和文件大小计算出每条线程下载的数量(其实这里没有必要了,因为每个人物只有一个下载线程,这里如果开多个线程“暂停”和“开始”以及“速率”计算有点困难暂时不考虑)。
5,在handler中开启下载器。

这里开了一个线程来开启下载器,不然点击下载按钮会卡一段时间,但是这里如果使用线程来开启下载器的话需要使用Handler来处理一下,否则下载器中的监听服务正常使用。

MutilDownFile下载管理类1

—————已经懒到不可救药了—————————–

这里写图片描述
这里写图片描述
这里写图片描述
该类主要初始化数据管理器,管理添加下载任务,和下载等待任务,提供查询当前存在的下载记录和删除下载记录。

DownloadThread下载器类

这里写图片描述

这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这个是下载器的核心代码,这代码是比较多一点,直接放出代码,可能比较乱,所以,又找到一个理由来截图了。
这个下载的方法是在这个Run中执行的,该类是一个Thread。
注意,这里有一个定时器,用于下载速度计算,这里计算的速度不是当前手机的网速,而是下载的平均速度,也就是= 下载量/下载时间。
还有,下载完成需要把数据库中的数据删除,并且把正在下载的列队中移除该任务,去等待下载任务中取一个任务来自动下载。

^^^^^^^^^^^^^^^我是符号,快乐的符号^^^^^^^^^^^^^^

上面是下载的核心代码,接下载主要就是操作界面了,这个也比较DT。这里下载列表选择Listview进行显示。所以呢,,,截图吧。。。××

这里写图片描述
好了,接下来看适配器里面把,开启下载也是在里面完成的…….截图……
这里写图片描述
这里写图片描述
这里写图片描述
其实开启下载就只有那么两句代码,,,,,,,
这里需要注意,从下载器中传来的下载状态需要使用Handler消息机制来和UI呼叫,否则报错。
……
……
……
我是省略号……
……
……
……
项目中的断点只不过是把每次下载的状态实时保存到数据库,下载完成就删除该记录。。。。。

其实这里还有涉及到了Application,里面有两个Map,分别存放正在下载的任务和等待下载的任务,代码就不贴了,不然又截图了。。。。

这个地方DT的地方就是下载器的数据和UI互交,这里设计一个框架感觉有点困难,所以好多sdk只管下载,不管你的互交方便性。

总之,下载功能需要根据项目实际情况来定…………….

转载地址:https://blog.csdn.net/leifengpeng/article/details/46727271 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:Xcode5.1和IOS8.3真机调试
下一篇:Android增量式升级程序

发表评论

最新留言

很好
[***.229.124.182]2024年04月21日 13时28分39秒