import android.content.Context;
import android.content.SharedPreferences;
import android.os.Handler;
import android.os.Message;
import java.io.InputStream;
import java.io.RandomAccessFile;
import java.net.HttpURLConnection;
import java.net.URL;
public class DownLoadFile {
/**
* Created by tianzhao on 2017/2/21 09:25.
* 多线程下载文件
*/
private static final String SP_NAME = "download_file";
private static final String CURR_LENGTH = "curr_length";
private static final int DEFAULT_THREAD_COUNT = 4;//默认下载线程数
//以下为线程状态
private static final String DOWNLOAD_INIT = "1";
private static final String DOWNLOAD_ING = "2";
private static final String DOWNLOAD_PAUSE = "3";
private Context mContext;
private String loadUrl;//网络获取的url
private String filePath;//下载到本地的path
private int threadCount = DEFAULT_THREAD_COUNT;//下载线程数
private int fileLength;//文件总大小
//使用volatile防止多线程不安全
private volatile int currLength;//当前总共下载的大小
private volatile int runningThreadCount;//正在运行的线程数
private Thread[] mThreads;
private String stateDownload = DOWNLOAD_INIT;//当前线程状态
private DownLoadListener mDownLoadListener;
public void setOnDownLoadListener(DownLoadListener mDownLoadListener) {
this.mDownLoadListener = mDownLoadListener;
}
interface DownLoadListener {
//返回当前下载进度的百分比
void getProgress(int progress);
void onComplete();
void onFailure();
}
public DownLoadFile(Context mContext, String loadUrl, String filePath) {
this(mContext, loadUrl, filePath, DEFAULT_THREAD_COUNT, null);
}
public DownLoadFile(Context mContext, String loadUrl, String filePath, DownLoadListener mDownLoadListener) {
this(mContext, loadUrl, filePath, DEFAULT_THREAD_COUNT, mDownLoadListener);
}
public DownLoadFile(Context mContext, String loadUrl, String filePath, int threadCount) {
this(mContext, loadUrl, filePath, threadCount, null);
}
public DownLoadFile(Context mContext, String loadUrl, String filePath, int threadCount, DownLoadListener mDownLoadListener) {
this.mContext = mContext;
this.loadUrl = loadUrl;
this.filePath = filePath;
this.threadCount = threadCount;
runningThreadCount = 0;
this.mDownLoadListener = mDownLoadListener;
}
/**
* 开始下载
*/
protected void downLoad() {
//在线程中运行,防止anr
new Thread(new Runnable() {
@Override
public void run() {
try {
//初始化数据
if (mThreads == null)
mThreads = new Thread[threadCount];
//建立连接请求
URL url = new URL(loadUrl);
HttpURLConnection conn = (HttpURLConnect

该博客展示了如何在Android应用中实现多线程文件下载,并支持暂停、取消和断点续传功能。通过创建DownLoadFile类,结合主线程和ProgressBar更新下载进度,提供开始、暂停、停止和取消下载的按钮操作。
最低0.47元/天 解锁文章
&spm=1001.2101.3001.5002&articleId=78568695&d=1&t=3&u=7740810a65314c92bc57bfdfd04666b5)
1001

被折叠的 条评论
为什么被折叠?



