任务说明
在Aria中,根据文件和url对应关系分为几种不同的任务:
- 普通任务
- 集合任务
- 特殊任务
无论是普通任务、集合任务、特殊任务
,都可以同时执行多个不同的任务,最大任务数可通过配置文件或代码配置。
普通任务
普通任务也叫单文件任务,指的是一个任务只处理一个文件
,如:
HTTP下载任务,一个任务只下载一个HTTP文件 HTTP上传任务,一个任务只上传一个文件到HTTP服务器 FTP下载任务,一个任务只下载一个FTP文件 FTP上传任务,一个任务只上传一个文件到FTP服务器
集合任务
集合任务指的是多文件任务,指的是一个任务处理一个url集合中的所有文件
,集合任务主要有两种。
HTTP组合任务,如下载一个视频时,
视频文件 + 字幕 + 视频截图
,这3个文件都是属于这个视频的,他们需要使用同一个进度条
来展示其进度。FTP文件夹任务,使用一个FTP文件夹地址,
将该地址下的所有文件和其子文件夹中的所有文件
下载下来,保存到本地。
特殊任务
特殊任务主要有两种:
m3u8 点播任务,m3u8文件分为所有文件和切片文件,一个索引文件对应多个切片文件,m3u8的下载地址为索引文件的地址,需要根据索引文件才可以获取到多个切片文件的下载地址。
m3u8 直播任务,和m3u8点播任务类似,唯一不同的是,m3u8直播任务没有恢复任务的操作,每次停止,再重新开始便是一个新任务。
任务队列说明
在Aria中,所有的上传\下载
操作都是一个任务,用户添加的任务时,Aria首先都会进入到cache_queue中:
- 如果run_queue没满,则会马上执行该任务
- 如果run_queue已满,aria会回调onWait方法
当任务完成、停止、失败,run_queue将会将任务出队,并回调相应的方法,然后从cache_queue中提取等待中的任务执行。
同时可以通过配置最大任务数控制执行任务大小,比如:最大任务数设置为2,但是用户连续下载4个文件,那么框架只会同时下载2个任务,剩下的两个任务将进入缓存队列,当其他运行中的任务完成、停止、删除
时,自动执行下载。
队列效果如下:
任务的生命周期
如上图所示,每一个任务都有自己的生命周期,任务处于生命周期不同的阶段回调对应的方法。
常用api
获取当前进度
// 未转换单位的进度,单位:byte long progress = task.getCurrentProgress(); // 转换单位的进度,单位: kb, mb String progress = task.getConvertCurrentProgress()
获取速度
// 未转换单位的速度,单位:byte/s long speed = task.getSpeed(); // 转换单位的速度,单位: kb/s, mb/s long speed = task.getConvertSpeed();
获取剩余时间
/** * 获取剩余时间,单位:s * 如果是m3u8任务,无法获取剩余时间;m2u8任务如果需要获取剩余时间,请设置文件长度{@link AbsEntity#setFileSize(long)} */ int timeLeft = task.getTimeLeft(); /** * 转换时间 * 时间<1 小时,显示分秒,显示样式 00:20 * 时间 ≥1 小时,显示时分秒,显示样式 01:11:12 * 时间 ≥1 天,显示天时分,显示样式 1d 01:11 * 时间 ≥7 天,显示样式 ∞ */ String timeLeft = task.getConvertTimeLeft();
获取当前任务百分比
int p = task.getPercent();
获取文件长度
// 未转换单位的文件长度,单位:byte long fileSize = task.getFileSize(); // 转换单位的文件长度,单位:kb, mb, gb long fileSize = task.getConvertFileSize();
获取任务状态
int state = task.getState();