Android实现多线程下载文件的方法

2019-12-10 19:58:34王冬梅
  • downloadinfo.setText("当前进度:" + progress + "%");   }  
  • downloadProgressBar.setProgress(progress);   }  
  • };   public class downloadTask extends Thread {  
  • private int blockSize, downloadSizeMore;   private int threadNum = 5;  
  • String urlStr, threadNo, fileName;   public downloadTask(String urlStr, int threadNum, String fileName) {  
  • this.urlStr = urlStr;   this.threadNum = threadNum;  
  • this.fileName = fileName;   }  
  • @Override  public void run() {  
  • FileDownloadThread[] fds = new FileDownloadThread[threadNum];   try {  
  • URL url = new URL(urlStr);   URLConnection conn = url.openConnection();  
  • //防止返回-1   InputStream in = conn.getInputStream();  
  • //获取下载文件的总大小   fileSize = conn.getContentLength();  
  • Log.i("bb", "======================fileSize:"+fileSize);   //计算每个线程要下载的数据量  
  • blockSize = fileSize / threadNum;   // 解决整除后百分比计算误差  
  • downloadSizeMore = (fileSize % threadNum);   File file = new File(fileName);  
  • for (int i = 0; i < threadNum; i++) {   Log.i("bb", "======================i:"+i);  
  • //启动线程,分别下载自己需要下载的部分   FileDownloadThread fdt = new FileDownloadThread(url, file, i * blockSize, (i + 1) * blockSize - 1);  
  • fdt.setName("Thread" + i);   fdt.start();  
  • fds[i] = fdt;   }  
  • boolean finished = false;   while (!finished) {  
  • // 先把整除的余数搞定   downloadedSize = downloadSizeMore;  
  • finished = true;   for (int i = 0; i < fds.length; i++) {