0.使用多线程下载会提升文件下载的速度,那么多线程下载文件的过程是:

(1)首先获得下载文件的长度,然后设置本地文件的长度

HttpURLConnection.getContentLength();

RandomAccessFile file = new RandomAccessFile("QQWubiSetup.exe","rwd");

file.setLength(filesize);//设置本地文件的长度

(2)根据文件长度和线程数计算每条线程下载的数据长度和下载位置。

如:文件的长度为6M,线程数为3,那么,每条线程下载的数据长度为2M,每条线程开始下载的位置如下图所示。

例如10M大小,使用3个线程来下载,

线程下载的数据长度 (10%3 == 0 ? 10/3:10/3+1) ,第1,2个线程下载长度是4M,第三个线程下载长度为2M

下载开始位置:线程id*每条线程下载的数据长度 = ?

下载结束位置:(线程id+1)*每条线程下载的数据长度-1=?

(3)使用HttpRange头字段指定每条线程从文件的什么位置开始下载,下载到什么位置为止,

如:指定从文件的2M位置开始下载,下载到位置(4M-1byte)为止

代码如下:HttpURLConnection.setRequestProperty("Range", "bytes=2097152-4194303");

(4)保存文件,使用RandomAccessFile类指定每条线程从本地文件的什么位置开始写入数据。

RandomAccessFile threadfile = new RandomAccessFile("QQWubiSetup.exe ","rwd");

threadfile.seek(2097152);//从文件的什么位置开始写入数据

1.多线程下载的核心代码示例

2.多线程断点下载功能,这里把断点数据保存到数据库中:注意代码注释的理解

(0)主Activity,关键点使用Handler更新进度条与开启线程下载避免ANR

若不使用Handler却要立即更新进度条数据,可使用:

//resultView.invalidate(); UI线程中立即更新进度条方法

//resultView.postInvalidate(); 非UI线程中立即更新进度条方法

(1)下载类:

注意计算每条线程的下载长度与下载起始位置的方法

文件下载器,使用

(2)文件操作,断点数据库存储



更多相关文章

  1. 解决android studio国内开发者Gradle下载慢问题
  2. Android单元测试 Only the original thread that created a view
  3. 关于android中postDelayed方法的讲解
  4. Android中使用Apache common ftp进行下载文件
  5. Android(安卓)sdk manager无法更新问题,使用代理下载
  6. Android中AsyncTask的入门使用学习指南
  7. Android(安卓)多线程编程
  8. Android-Looper类,Looper.prepare()和Looper.loop()
  9. android 异步加载AsyncTask

随机推荐

  1. 爬取B站20万+条弹幕,我学会了如何成为B站
  2. 原理+代码|手把手教你使用Python实战反欺
  3. 用Python打造一款文件搜索工具,所有功能自
  4. 老板让我从几百个Excel中查找数据,我用Pyt
  5. 可视化工具不知道怎么选?深度评测5大Pytho
  6. 原理+代码|Python实战多元线性回归模型
  7. 原理+代码|Python基于主成分分析的客户信
  8. Python办公自动化 | 从PPT到Word
  9. 十分钟快速了解Pandas的常用操作!
  10. 原理 + 代码|手把手教你用Python实现智能