- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
原创android多任务断点续传下载
多任务下载
网上看了很多下载,都是单任务多线程,都没有人写多任务下载功能。找了2天还是没找到,所以自己研究,写了一个多任务断点下载 暂停 实时更新 等功能的 下载器,因为公司代码 所以不能提供源码 望见谅,本人安卓新人 接触不到2个月 代码写的不好,只是为需要的人提供一点思路
废话不说,开篇吧,
第一。多任务下载思路,
当我要实现这个功能,看过网上,加入服务再让服务去启线程,服务不一定需要 具体看你的客户端
比如下图列表,当用点击某一项 这个时候添加到下载中,实现后太下载,(需判断是否存在SD卡 这个我就不唠叨了)
这里 离不开数据库了, 因为当前的Activity 有自己的handler 或者list , 当需要一个manger 管理的时候,需要查找下载的信息,进度 。等等,
重点说线程,
1 ..线程类里,当初次加入线程时 先判断是否要加入数据库,
判断是否可重复下载,这里是指SD卡删掉 数据库 还有信息,
开始下载,RandomAccessFile 类出现,文件的大小 范围 seek从哪里开始,(跟多线 那里一样,如果不会使用 RandomAccessFile 可以去看看教学视频)
然后 while()读数据了 并向handler 发数据了,(handler发数据?这里说明需要一个handler对象了,构造的时候记得赋值)
以上类都可以说是下载列表的一个下载操作,相信做过下载的都可以直接完成了,比较复杂的就是后面Manger管理类毫无关系 接下来怎么产生联系呢?
a.第一,Manger的展示列表,此列表数据来至数据库,你也别想着内存取,取是可以取 但是关了程序后 你的list就为空了,还不如去数据库差,可以减少判断。
B.既然是来至数据库,这个肯定要先写Dao方法查询了 一个List 集合,填充到页面,
当做完这里 你可以能有数据了 但是问题是 它的下载进度是更新不了,先说怎么实现这个更新, 全局的 handler 对象应该浮现出来,这个时候 线程类的handler对象是下载列表的 并不是当前manger的,所以这个时候 在manger类里面需要给线程类handler赋值
MyThread,mhandler = handler;
这样话就可以拿到下载线程发出的Message咯。也就是发送的字节下载数,然后在manger的handler类更新UI这个时候 下载进度就是可以动的了这个时候已经是多任务下载了,并且可以更新下载进度了,
C.暂停的控制,也许你会想到全局bool 。我之前也是这么想的但是后来发现 一个暂停全部就暂停了,所以不能全局变量 所以需要针对每个线程,每个线程怎么控制呢 这个时候需要一个map了,在开下载的时候 把线程对象存到map里,那么再我们单击点一项时,则就可以通过url 找到对应的 线程对象了,在改变其状态 就可以暂停了 ,
D.再下载功能,当暂停时。判断是否第一次进入,因为用户直接到Manger界面。那么 就没有线程对象 那么要到数据库把任务最后的字节给读出来,如果存在线程对象,那么就去读到线程对象,就可以读到开始点了,这个开始点要判断好 否则就不可以续下载了,
代码 截图片段
map 里的线程
这是 下载发数据
这是Manger类 Handler的更新UI
这是线程下载 状态,已经数据库取出下载类型,
以上就是实现思路,已经代码片段 。多多给与意见,
原创力文档


文档评论(0)