多线程下载的实现过程:
1.首先获得服务器端下载文件的大小,然后在Android客户端创建一个空白文件,大小跟服务器文件的大小一模一样。
得到服务器端返回的文件的大小的方法是:conn.getContentLength();
在本地创建空白文件的方法:
File file = new File(Environment.getExternalStorageDirectory(), "temp.exe");
RandomAccessFile arf = new RandomAccessFile(file, "rwd");
raf.setLength(length);
2.根据开启线程的数量,把服务器端的资源等分成若干份,并开启线程。
threadCount 线程数量
long blocksize = length / threadCount 每个区块的大小
3.使用Http的Range头字段指定每条线程从文件的什么位置开始下载,下载到什么位置为止。
conn.setRequestProperty("Range", "bytes=0-100");
4.保存文件,使用RandomAccessFile类指定每条线程从本地文件的什么位置开始写入数据。
RandomAccessFile threadfile = new RandomAccessFile("ff.exe", "rwd");
threadfile.seek(0);//从文件的什么位置开始写入数据
下载时响应码是206,所以判断是否响应成功时一般用responsecode/100 == 2 。
根据路径获取文件的文件名:
String path = "http://10.0.2.2/ff.exe";
int start = path.lastIndexOf("/")+1;
String fileName = path.substring(start);
获取当前应用的上下文:getApplicationContext()
进度条:ProgressBar
设置进度条的最大值:setMax(a);
设置进度条的进度:setProgress(b);
b占a的百分之多少,进度条就走到那个百分比处。
利用GitHub开源网站上的xUtils开源框架做下载:
https://github.com/wyouflf/xUtils