Android实现多线程断点下载操作指南与代码示例

根据网上资料整合,以下是Android多线程断点下载的完整实现方案。该功能允许下载时暂停、继续和取消,还能实时显示下载进度、文件大小、已完成百分比、下载速度等。以下是主要实现步骤:

1. 初始化与设置

MainActivity中初始化UI,包括两个按钮(用于下载控制)和一个显示进度的进度条。示例代码如下:

public class MainActivity extends Activity implements OnClickListener, DownloadListener{
    private static final String TAG = "MainActivity";
    private static final String SD_PATH = Environment.getExternalStorageDirectory().getPath();
    private boolean isPause = false;
    private MultiThreadDownload multiThreadDownload;
    private Button buttonDownload;
    private Button buttonCancel;
    private TextProgressBar progressBarTest; // 显示当前进度
    private TextView textInfo;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        // 初始化按钮和文本
        buttonDownload = findViewById(R.id.buttonDownload);
        buttonDownload.setText("单击下载");
        buttonDownload.setOnClickListener(this);
        buttonCancel = findViewById(R.id.buttonCancel);
        buttonCancel.setOnClickListener(this);
    }

2. 设置点击事件

  • buttonDownload:下载或暂停,点击时开始多线程下载任务。
  • buttonCancel:取消下载并重置进度。
@Override
public void onClick(View v) {
    String downloadUrl = "http://example.com/file.apk";
    String savePath = SD_PATH + File.separator + "downloadHelper" + File.separator;
    String fileName = "MyFile.apk";
    switch(v.getId()){
        case R.id.buttonDownload:
            if(!isPause){
                multiThreadDownload = new MultiThreadDownload(MainActivity.this, downloadUrl, savePath, fileName, this);
                multiThreadDownload.start();
                buttonDownload.setText("下载...");
                isPause = true;
            } else {
                buttonDownload.setText("暂停...");
                isPause = false;
                multiThreadDownload.onPause();
                multiThreadDownload = null;
            }
            break;
        case R.id.buttonCancel:
            if(multiThreadDownload != null && multiThreadDownload.isDownload()) {
                multiThreadDownload.onCancel();
                isPause = false;
            }
            multiThreadDownload = null;
            break;
    }
}

3. 下载进度显示

使用Handler更新进度条和下载信息:

private Handler multiHandler = new Handler() {
    @Override
    public void handleMessage(Message msg) {
        if(msg.what == 1) {
            Bundle data = msg.getData();
            progressBarTest.setProgress(data.getInt("completedSize"));
            textInfo.setText(String.format("已完成:%.2fMB", data.getInt("completedSize") / 1024f / 1024));
            if(data.getBoolean("isCompleted")){
                buttonDownload.setText("下载完成");
                textInfo.setText("下载完成");
            }
        }
    }
};

4. 取消与暂停功能

  • onCancelDownload():重置进度条,设置下载按钮为可重启状态。

代码示例完整可见上方代码片段,适用于网络不稳定时实现断点续传。

jar 文件大小:22.44KB