多線程下載一個文件時,進(jìn)度條顯示的進(jìn)度數(shù)是有問題的!
?(在頁面上添加進(jìn)度條的進(jìn)度值)當(dāng)文件的大小不能被平均分配到每個子線程中下載時,也就是說有種可能一個線程的下載大小肯定會是大于平均值,那么進(jìn)度條顯示的進(jìn)度數(shù)100%就顯示錯誤了!那怎么獲取所有子線程總的下載進(jìn)度數(shù)呢?????
//SC_PARTIAL_CONTENT 部分下載的時候返回的狀態(tài)碼206 ? 當(dāng)使用Range
if (connection.getResponseCode() == HttpStatus.SC_PARTIAL_CONTENT) {
//讀取數(shù)據(jù)
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只是單個線程的進(jìn)度表示整個下載任務(wù)的進(jìn)度,可能單個線程已經(jīng)結(jié)束(界面上已經(jīng)顯示100%),但是整個下載任務(wù)還沒結(jié)束?????。。?!,那怎么獲取所有子線程總的下載進(jìn)度數(shù)呢?????
intent.putExtra("finished", finished*100/fileInfo.getLength());
context.sendBroadcast(intent);
//}
//在下載暫停時,保存下載進(jìn)度
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());
}
2015-05-05
在DownloadTask類中定義一個成員變量mFinished,所有線程共用它,在這個變量上累計進(jìn)度
2015-11-11
是定義了,可是下載到了103%怎么破?