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

多线程下载一个文件时,进度条显示的进度数是有问题的!

 (在页面上添加进度条的进度值)当文件的大小不能被平均分配到每个子线程中下载时,也就是说有种可能一个线程的下载大小肯定会是大于平均值,那么进度条显示的进度数100%就显示错误了!那怎么获取所有子线程总的下载进度数呢?????




//SC_PARTIAL_CONTENT 部分下载的时候返回的状态码206   当使用Range

if (connection.getResponseCode() == HttpStatus.SC_PARTIAL_CONTENT) {

//读取数据

input = connection.getInputStream();

byte [] buffer = new byte[1024*4];

int len=-1;

long time = System.currentTimeMillis();

System.out.println("文件总大小--->"+fileInfo.getLength());

while((len = input.read(buffer)) != -1){

//写入文件

raf.write(buffer, 0, len);

finished += len;

System.out.println("finished_real--->"+finished);

//if (System.currentTimeMillis()-time> 500) {

time = System.currentTimeMillis();

//--------------------这里的finished只是单个线程的进度表示整个下载任务的进度,可能单个线程已经结束(界面上已经显示100%),但是整个下载任务还没结束????!!!!,那怎么获取所有子线程总的下载进度数呢?????

intent.putExtra("finished", finished*100/fileInfo.getLength());

context.sendBroadcast(intent);

//}

//在下载暂停时,保存下载进度

if (isPause) {

System.out.println("暂停下载");

dao.updateThread(threadInfo.getUrl(), threadInfo.getId(), finished);

return;

}

//System.out.println("----------");

}

System.out.println("下载完成");

//下载完成,删除线程信息

dao.deleteThread(threadInfo.getUrl(), threadInfo.getId());

}


正在回答

2 回答

在DownloadTask类中定义一个成员变量mFinished,所有线程共用它,在这个变量上累计进度

0 回复 有任何疑惑可以回复我~

是定义了,可是下载到了103%怎么破?

0 回复 有任何疑惑可以回复我~
#1

凌伊

碰到同样的问题,暂时再重新下载就会有这个问题,如果一直下载完就不会有,怀疑是暂停的时候进度保存不对, 求解决方法
2016-01-22 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
Android-Service系列之多线程断点续传下载
  • 参与学习       21816    人
  • 解答问题       54    个

本视频教程主要代领我们要学习的多线程续传下载程序的开发

进入课程

多线程下载一个文件时,进度条显示的进度数是有问题的!

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信