HTTP组合任务

HTTP组合任务是指多个下载任务打包一起下载,如下载一个视频时,包含了视频、封面、字幕等信息,使用组合任务,这三个文件的下载共享同一进度。并且这三个文件都将下载到同一文件夹中,效果如下:

组合任务效果

一、创建任务

组合任务说明,组合任务会将url集合中的所有文件保存在同一个文件夹中,因此创建任务的时候,你需要设置的文件保存路径是文件夹路径
如果你不知道url集合中所有文件的总长度,那么你需要使用unknownSize() 告诉Aria框架。

List<String> subUrls = new ArrayList<>(); // 创建一个http url集合
subUrls.add(videoUrl);  // 添加一个视频地址
subUrls.add(tsUrl);     // 添加一个字幕地址
subUrls.add(picUrl)            // 添加一个视频截图

long taskId = Aria.download(this)
        .loadGroup(subUrls) // 设置url集合
        .setDirPath(dirPath)    // 设置该组合任务的文件夹路径
        .unknownSize()            // 如果你不知道组合任务的长度请设置这个,需要注意的是,恢复任务时也有加上这个
        .create();

通过#create(),方法,可以创建一个新的下载任务; 不同于普通任务的下载,由于组合任务的特殊性,Aria无法有效快速获取组合任务的总长度,因此需要你使用#setFileSize()设置组合任务总长度。 如果你无法获取文件总长度,可以参考1.3的设置。

1.1、设置http参数

如果你需要设置http请求参数、header、等信息,见HTTP参数设置

1.2、覆盖路径

在某些情况下,你的文件保存路径可能已经被占用了,但是你只能使用这个路径保存文件,可以使用#setFilePath(filePath, true)接口强制使用该文件保存路径。

1.3、#unknownSize()

有的时候,你可能无法获取到组合任务的总长度,你可以使用#unknownSize()告诉Aria,让Aria自动设置长度。
TIP:对于子任务较少的情况,你是可以这样做,对于只任务非常多的情况,非常不建议使用#unknownSize(),这将会消耗更多的时间才能进入下载流程。

⚠️注意!!如果在创建任务的时候使用了#unknownSize(),那么恢复组合任务的时候也必须使用#unknownSize()

1.4、设置子任务的文件名

默认情况下,组合任务的文件名是一个随机字符串,这种情况下,可以使用#setSubFileName(List<String>)来设置每一个子任务的文件名称。
TIP: 设置文件名的列表长度必须和子任务的下载列表长度一致

二、停止、恢复、删除任务

2.1、获取任务id

停止、恢复、删除任务需要使用任务id。获取任务id的方法有两种,详情见获取任务列表

2.2、停止任务

Aria.downlaod(this).loadGroup(taskId).stop();

2.3、恢复任务

Aria.download(this).loadGroup(taskId).resume();

Aria.download(this).loadGroup(taskId).resume(true); // 立即进入执行队列

2.4、删除任务

Aria.download(this).loadGroup(taskId).cancel();

在下载完成的情况下,#cancel()方法只会删除记录,而不会删除已下载完成的文件,如果你希望在下载完成的情况下删除已下载完成的文件,可以是使用#cancel()的重载方法#cancel(true)

2.5 其他API

除了这些基本的任务控制外,你还可以查看任务控制文档。

三、子任务控制

有的时候,你可以需要手动控制组合任务中某个子任务的下载状态。对于这种需求,可以使用#getSubTaskManager()获取子任务管理器,然后通过子任务管理器控制子任务的停止、恢复功能。

3.1、启动组合任务中的一个子任务

Aria.download(this)
        .loadGroup(taskId)
        .getSubTaskManager()
        .startSubTask(subTaskUrl); // 子任务下载地址

3.2、 停止组合任务中的一个子任务

Aria.download(this)
    .loadGroup(taskId)
    .getSubTaskManager()
    .stopSubTask(subTaskUrl); // 子任务下载地址

四、任务状态监听

在Aria中,任务状态是通过java注解获取的。要获取任务状态,你只需要以下几个步骤便可。

1、在#onCreate()或其它位置注册Aria

Aria.download(this).register();

2、使用注解获取任务状态,如执行中、完成

/*
 * 任务执行中
 */
@DownloadGroup.onTaskRunning() 
protected void running(DownloadGroupTask task) {
    Log.d(TAG, "group running, p = "
        + task.getPercent()
        + ", speed = "
        + task.getConvertSpeed()
        + "current_p = "
        + task.getCurrentProgress());
    getBinding().setProgress(task.getPercent());
    getBinding().setSpeed(task.getConvertSpeed());
    mChildList.updateChildProgress(task.getEntity().getSubEntities());
  }

/*
 * 任务完成
 */
 @DownloadGroup.onTaskComplete() 
 protected void taskComplete(DownloadGroupTask task) {
    getBinding().setProgress(100);
    getBinding().setSpeed("");
    mChildList.updateChildProgress(task.getEntity().getSubEntities());
    T.showShort(this, "任务组下载完成");
    L.d(TAG, "任务组下载完成");
    getBinding().setStateStr(getString(R.string.start));
  }

3、子任务的事件获取

@DownloadGroup.onSubTaskRunning 
void onSubTaskRunning(DownloadGroupTask groupTask, DownloadEntity subEntity) {
    // 子任务执行中的回调   
}

@DownloadGroup.onSubTaskComplete 
void onSubTaskComplete(DownloadGroupTask groupTask, DownloadEntity subEntity) {
    // 子任务完成的回调
}

⚠️注意:如果你在非Activity或Fragment中注册了Aria,那么你需要在销毁对象时调用Aria.download(this).unRegister();取消注册,否则会出现内存泄漏的情况。

👉其它注解👈

Copyright © 2018 laoyuyu. | 蜀ICP备17031160号.            更新时间: 2020-03-03

results matching ""

    No results matching ""