Android多任务断点下载

项目中有一个多任务下载模块,使用的是第三方的一个下载模块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只管下载,不管你的互交方便性。

总之,下载功能需要根据项目实际情况来定…………….
http://download.csdn.net/detail/leifengpeng/8862173

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值