Android 中实现多线程下载和断点续传的原理和代码

本文介绍了如何在Android平台上实现多线程下载和断点续传功能。通过创建特定类,利用Java代码,我们可以设置网络资源路径、本地保存路径和线程数量来启动下载。在下载过程中,可以通过更新进度条来展示每个线程的下载进度,并通过Handler接收线程完成的信号。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在上一章,用Java代码实现了 多线程下载和断点续传, 现在我们将它移植到 Android 上面.

下面这个类能帮助我们实现多线程下载和断点续传功能.

这里写图片描述
介绍一下这个类的使用方法.

快速下载
1. 该类的构造方法需要提供三个参数.
2. public MuchThreadDown(String path, String targetFilePath, int threadCount)
- 参数一 : 要下载的资源网络路径.
- 参数二 : 资源保存在手机上的路径
- 参数三 : 开启的线程个数.默认为 3.
3. 创建类的实例MuchThreadDown threadDown = new MuchThreadDown(url_str, path, progress);
4. 调用类的 download() 方法.
5. 文件会被下载到指定的目录.

下载的过程中更新进度条

  1. 如果在下载的时候需要在页面展示进度条.
  2. 为每一个线程创建一个进度条控件,封装到Map<Integer, ProgressBar> map中的key代表线程的id,比如有当前开了三个线程, 线程的id就是0, 1, 2 进度条就需要我们动态的去创建了,将创建的进度条封装到map中.threadDown.setProgressBar_map(progressBar_map); 设置给 MuchThreadDown 的对象.

获取线程的下载结果
1. 将handler对象设置给MuchThreadDown 的对象.threadDown.setHandler(handler); 当一个线程下载完成的时候,返回 1 .
2. Message中封装的数据如下
3. `Message msg = Message.obtain();

  msg.what = 66;
   msg.obj = 1;
   handler.sendMessage(msg);`
package com.yb.muchthreaddown.util;

import java.io.File;
import java.io.InputStream;
import java.io.RandomAccessFile;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Map;

import android.os.Handler;
import android.os.Message;
import android.widget.ProgressBar;

/**
 * 多线程下载 和 断点续传 for Android
 * @author 杨斌.
 *
 */
public class MuchThreadDown {
   
   

//  private String path = "http://mpge.5nd.com/2016/2016-11-15/74847/1.mp3";    //下载路径
    private String path = "http://117.169.69.238/mp3.9ku.com/m4a/186947.m4a";
    private String targetFilePath="/";  //下载文件存放目录
    private int threadCount = 3;    //线程数量
    public Map<Integer, ProgressBar> progressBar_map;//键 线程id, 值 进度条控件
    private Handler handler;
    /**
     * 构造方法 
     * @param path 要下载文件的网络路径
     * @param targetFilePath 保存下载文件的目录
     * @param threadCount 开启的线程数量,默认为 3
     */
    public MuchThreadDown(St
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值