多线程下载文件(支持暂停、取消、断点续传)

该博客展示了如何在Android应用中实现多线程文件下载,并支持暂停、取消和断点续传功能。通过创建DownLoadFile类,结合主线程和ProgressBar更新下载进度,提供开始、暂停、停止和取消下载的按钮操作。
摘要由CSDN通过智能技术生成

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值