为了账号安全,请及时绑定邮箱和手机立即绑定

Android-Service系列之多线程断点续传下载

XRay_Chen 移动开发工程师
难度中级
时长 1小时32分
学习人数
综合评分9.83
28人评价 查看评价
9.9 内容实用
9.9 简洁易懂
9.7 逻辑清晰
源码下载:
github: https://github.com/103style/Download.
csdn: http://download.csdn.net/download/lxk_1993/9511182
说几个注意点和改进点
生成list的 mFileList的时候 注意添加的fileinfo id要和position一致 不然会错乱(这点不太好 比如加入删除任务功能后会比较麻烦)
下载 停止按钮注意不能多次点击 可以在代码中进行限制
退出aty时 线程仍然会下载一段时间且不会保存 可以在service的ondestory方法中对map mtasks遍历 改ispaused为true
删除未完成下载文件后 数据库中未删除,会导致下载不完整 。可以在service中初始化时判断文件是否存在
确实有难度
感谢感谢,比51强

最新回答 / 依然丶丶丶
如果服务已经存在,再次开启服务是不会创建新的实例的,只会调用onStartCommand方法,(视频中是继续下载),当我们完成一个完整的动作或任务后是可以停止服务的,以为此时服务已经没有存在的意义,当我们有新的任务可以重新开启一个。服务是Android四大组件之一,和activity是等级的,通俗点说,服务就是没有UI界面的activity,如果服务里没有代码在运行,服务开着也是没有什么开销的,几乎可以忽略不计。

最新回答 / MyBilly
这个一般都是最后一次文件写入完时间没有一个周期,最简单的办法,就是直接在接收到下载完成的广播后,强制设置进度为100即可
listview建议用局部更新,就是在downloadTask里写一个handler,调用getter,setter方法,然后再listviewadapter里new handler并通过sethandler()传过去,然后再下载的进度与id通过handler发送过去,然后进行局部更新,还有很多小伙伴反应,下载进度不对,我用的也是老师的百分比方法,发现最后会变成负数,于是我就把每次获取到的length传递回去,通过holder.mypp.incrementProgressBy(length);可以正确显示进度条,最后建议大家学完这个还是去看看框架吧,做起来相对简单一点
这样下载一点就刷新整个listview会不会太浪费了啊。。。。

最新回答 / 触手摸不到的温柔
当然会有问题的,好比一个用户里有100元钱,同一时间段我在银行取100,你用支付宝转100,如果不加锁,银行就相当于执行了200的消费服务。

最新回答 / 趟水过河
demo中进度值的设定有两个: 文件的下载进度 和 当前线程的下载进度,   通过广播发送的是文件的下载进度值,单个线程的进度值是用来记录此线程的下载断点的。  每个线程是都会发送广播的,毕竟每个线程的更新,都表示着文件的下载进度的更新。
老师的逻辑好强,2课 我看了整整两天才捋清思路
讲得很详细,赞!!
课程须知
适合有一定Android开发基础的同学,要求学生能够有很强的java中多线程以及线程池的基础,灵活使用service和多线程结合实现断点续传功能。
老师告诉你能学到什么?
Activity和Service的通信方法 ListView和BaseAdapter的使用 数据库操作 多线程分段下载的原理 线程池的使用 线程同步的应用 单例模式的应用 Notification的使用 Messenger的使用

微信扫码,参与3人拼团

微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

友情提示:

您好,此课程属于迁移课程,您已购买该课程,无需重复购买,感谢您对慕课网的支持!

本次提问将花费2个积分

你的积分不足,无法发表

为什么扣积分?

本次提问将花费2个积分

继续发表请点击 "确定"

为什么扣积分?

举报

0/150
提交
取消