Skip to content
Aige edited this page Nov 19, 2015 · 2 revisions

简单使用

一旦你将MultiThreadDownloader集成到你的项目中,你就可以调用DLManager的dlStart(String url)方法传入下载地址启动一次下载任务:

DLManager.getInstance(context).dlStart("http://www.******.com/down.asp?id=000000");

在大多数情况下,你也许想实时监听下载进度或者获取下载完成后的文件对象,这时你可以调用dlStart的重载方法dlStart(String url, IDListener listener)传入一个IDListener对象监听下载的过程:

DLManager.getInstance(this).dlStart("http://www.******.com/down.asp?id=000000", new IDListener() {
    @Override
    public void onPrepare() {

    }

    @Override
    public void onStart(String fileName, String realUrl, int fileLength) {

    }

    @Override
    public void onProgress(int progress) {

    }

    @Override
    public void onStop(int progress) {

    }

    @Override
    public void onFinish(File file) {

    }

    @Override
    public void onError(int status, String error) {

    }
});

IDListener提供了五个回调方法监控一次下载的过程,这五个方法的具体调用过程如下。

onPrepare

当你调用dlStart方法启动一次下载任务后,MultiThreadDownloader会在启动具体的任务线程前作一些简单的判断,比如下载地址是否合法、网络是否可用、是否可以续传、是否需要队列下载等等,当这些所有的判断通过后才会启动任务线程,而该方法会在所有的这些判断通过后且启动任务线程前被调用。

onStart(String fileName, String realUrl, int fileLength)

该方法会在任务线程执行具体的数据读取或线程分发前被调用。

fileName 该参数表示文件将会被保存的名字

realUrl 如果传入的地址为需要重定向的地址,该参数将会表示重定向后的地址,如果传入的地址即为真实地址,那么该参数的值将会与传入的下载地址一致

fileLength 文件的大小

onProgress(int progress)

顾名思义该方法会在数据传输时被回调

progress 下载的实时进度

onStop(int progress)

该方法会在下载停止时被调用,这里需要注意的是在MultiThreadDownloader中没有暂停的概念,停止即为暂停,反之亦然

progress 下载停止的进度

onFinish(File file)

下载完成后该方法会被调用并返回下载完成的文件的File对象

onError(int status, String error)

每当出现MultiThreadDownloader可捕捉的错误时该方法都会被调用

status 该参数表示错误码,具体的错误码可以在DLError中查询

error 该参数表示错误的描述信息 在很多时候你也许并不想实现上述的全部五个回调方法,MultiThreadDownloader提供了一个SimpleDListener类,你可以使用该类替代IDListener并实现你感兴趣的方法即可:

DLManager.getInstance(this).dlStart("http://www.******.com/down.asp?id=000000", new SimpleDListener() {
    @Override
    public void onStart(String fileName, String realUrl, int fileLength) {

    }

    @Override
    public void onProgress(int progress) {

    }

    @Override
    public void onFinish(File file) {

    }
});

除了dlStart方法外,MultiThreadDownloader还提供了一个dlStop(String url)和dlCancel(String url)方法来停止和取消一个下载任务。dlStop和dlCancel本质的区别是:dlCancel会删除掉所有相关的信息,包括本地下载完成或未完成的文件和数据库相关的下载记录;而dlStop则仅仅是将相关进度保存到数据库方便下次启动相同下载任务时续传。 值得注意的是,当你在Activity中启动下载时,应该在适当的时候调用dlStop方法停止下载,并在适当的时候重启它:

@Override
protected void onStop() {
    super.onStop();
    DLManager.getInstance(this).dlStop("http://www.******.com/down.asp?id=000000");
}

@Override
protected void onRestart() {
    super.onRestart();
    DLManager.getInstance(this).dlStart("http://www.******.com/down.asp?id=000000");
}

当然并不建议直接在Activity中启动下载,除非你能保证在文件下载完成前该Activity不会被尝试销毁。一个更好的做法是将下载的逻辑写在Service中并由Service统筹管理所有的下载回调方法分发给Activity或其他的组件。

扩展使用

dlStart方法有多个重载方法,其完整描述如下:

void dlStart(String url, String dir, String name, List<DLHeader> headers, IDListener listener){

}

url 该参数表示下载地址

dir 该参数表示文件下载后将要保存在的目录路径,该参数可为空,当其为空时会使用应用内部存储的缓存目录作为下载目录路径

name 该参数表示下载文件将要保存为的名字,包含后缀名,例如“AigeStudio.apk”。该参数也可为空,不过值得注意的是,当其为空时MultiThreadDownloader将会尝试从下载地址和响应头中猜测文件名,如果无法得到具体的文件名,MultiThreadDownloader将会使用一个随机字符串替代

headers 该参数表示请求头。默认情况下,你不需要设置该参数,MultiThreadDownloader会使用一个默认的请求头配置发起连接请求,如果你有特殊的需求,可以尝试设置该参数

listener 下载监听器对象

MultiThreadDownloader除了提供dlStart、dlStop和dlCancel三种方法控制下载外还提供了一个setMaxTask方法来限制同一时间MultiThreadDownloader中下载任务的个数:

public DLManager setMaxTask(int maxTask){

}

需要注意的是,当下载任务的个数超过所设置的最大值时并不会拒绝下载而是将新的下载任务缓存至下载队列,当上一个任务完成后会自动启动队列中的下载任务