xUTILS插件
最简单的方法 -- 使用 xUtils
的 的HttpUitls
下载文件,支持多线程断点下载
下载地址 https://github.com/wyouflf/xUtils
使用方法:
HttpUtils http = new HttpUtils();
HttpHandler handler = http.download("http://apache.dataguru.cn/httpcomponents/httpclient/source/httpcomponents-client-4.2.5-src.zip",
"/sdcard/httpcomponents-client-4.2.5-src.zip",
true, // 如果目标文件存在,接着未完成的部分继续下载。服务器不支持RANGE时将从新下载。
true, // 如果从请求返回信息中获取到文件名,下载完成后自动重命名。
new RequestCallBack<File>() {
@Override
public void onStart() {
testTextView.setText("conn...");
}
@Override
public void onLoading(long total, long current, boolean isUploading) {
testTextView.setText(current + "/" + total);
}
@Override
public void onSuccess(ResponseInfo<File> responseInfo) {
testTextView.setText("downloaded:" + responseInfo.result.getPath());
}
@Override
public void onFailure(HttpException error, String msg) {
testTextView.setText(msg);
}
});
...
//调用cancel()方法停止下载
handler.cancel();
...
注意 xUtils 已经更新到xUtils3 使用方法也有很多变化。参加官方文档: https://github.com/wyouflf/xUtils3
使用HTTP协议实现多线程断点下载
多线程实现思路:
- 发送http get请求到下载地址
- 获取文件总长度,创建和文件等长度的临时文件
- 用文件总长度除以线程数,计算每个线程的开始和结束位置
- 开启多线程, 按照位置开始下载数据
- 将下载数据存在临时文件的对应位置
加断点
- 使用一个int变量记录下载当前总下载长度
- 下载时将该变量存入临时文件中
- 下次下载以该位置作为下载起点。
- 下载完毕后删除临时文件
详细实现步骤参见: http://blog.csdn.net/guanhang89/article/details/51346790