Aria项目源于15年工作中遇到的一个文件下载管理的需求,当时被下载折磨的痛不欲生,从那时起便萌生了编写一个简单易用,稳当高效的下载框架,aria经历了1.0到3.0的开发,算是越来越接近当初所制定的目标了。
Aria有以下特点:简单、方便可以在Activity、Service、Fragment、Dialog、popupWindow、Notification等组件中使用
支持任务自动调度,使用者不需要关心任务状态切换的逻辑
支持https地址下载在配置文件中很容易就可以设置CA证书的信息
支持300、301、302重定向下载链接下载
支持上传操作
下载
compile 'com.arialyy.aria:Aria:3.1.1'
由于Aria涉及到文件和网络的操作,因此需要你在manifest文件中添加以下权限
使用Aria进行下载添加任务(不进行下载),当其他下载任务完成时,将自动下载等待中的任务Aria.download(this)
.load(DOWNLOAD_URL)
.setDownloadPath(Environment.getExternalStorageDirectory().getPath() + "/test.apk")//文件保存路径
.add();
下载Aria.download(this)
.load(DOWNLOAD_URL) //读取下载地址
.setDownloadPath(Environment.getExternalStorageDirectory().getPath() + "/test.apk") //设置文件保存的完整路径
.start(); //启动下载
暂停Aria.download(this).load(DOWNLOAD_URL).pause();
恢复下载Aria.download(this).load(DOWNLOAD_URL).resume();
取消下载Aria.download(this).load(DOWNLOAD_URL).cancel();
下载状态获取
如果你希望读取下载进度或下载信息,那么你需要创建事件类,并在onResume(Activity、Fragment)或构造函数(Dialog、PopupWindow),将该事件类注册到Aria管理器。创建事件类final static class MySchedulerListener extends Aria.DownloadSchedulerListener{
@Override public void onTaskPre(DownloadTask task) {
super.onTaskPre(task);
}
@Override public void onTaskStop(DownloadTask task) {
super.onTaskStop(task);
}
@Override public void onTaskCancel(DownloadTask task) {
super.onTaskCancel(task);
}
@Override public void onTaskRunning(DownloadTask task) {
super.onTaskRunning(task);
}
}
将事件注册到Aria@Override protected void onResume() {
super.onResume();
Aria.whit(this).addSchedulerListener(new MySchedulerListener());
}
Aria参数配置
配置文件设置参数
创建aria_config.xml文件,将其放在assets目录下,添加以下内容<?xml version="1.0" encoding="utf-8"?>
代码中设置参数
除了文件方式外修改Aria参数外,同样的,你也可以在代码中动态修改Aria参数通过Aria.get(this).getDownloadConfig()或Aria.get(this).getUploadConfig()直接获取配置文件,然后修改参数如以下所示:// 修改最大下载数,调用完成后,立即生效
// 如当前下载任务数是4,修改完成后,当前任务数会被Aria自动调度任务数
Aria.get(this).getDownloadConfig().setMaxTaskNum(3);
常用接口停止所有任务Aria.download(this).stopAllTask();删除所有任务Aria.download(this).removeAllTask();获取当前任务的下载速度 速度参数有点特殊,需要下载事件支持@Override public void onTaskRunning(DownloadTask task) {
//如果你打开了速度单位转换配置,将可以通过以下方法获取带单位的下载速度,如:1 m/s
String convertSpeed = task.getConvertSpeed();
//如果你有自己的单位格式,可以通过以下方法获取原始byte长度
long speed = task.getSpeed();
}获取下载的文件大小、当前进度百分比 同样的,你也可以在DownloadTask对象中获取下载的文件大小@Override public void onTaskRunning(DownloadTask task) {
//获取文件大小
long fileSize = task.getFileSize();
//获取单位转换后的文件大小
String fileSize1 = task.getConvertFileSize();
//当前进度百分比
int percent = task.getPercent();
}
tips:为了防止内存泄露的情况,事件类需要使用staic进行修饰
上传添加任务(只添加,不上传)Aria.upload(this)
.load(filePath) //文件路径
.setUploadUrl(uploadUrl) //上传路径
.setAttachment(fileKey) //服务器读取文件的key
.add();上传Aria.upload(this)
.load(filePath) //文件路径
.setUploadUrl(uploadUrl) //上传路径
.setAttachment(fileKey) //服务器读取文件的key
.start();取消上传Aria.upload(this).load(filePath).cancel();
混淆配置-dontwarn com.arialyy.aria.**
-keep class com.arialyy.aria.**{*;}