Aria

介绍:

下载可以很简单

运行效果:

使用说明:

Aria项目源于15年工作中遇到的一个文件下载管理的需求,当时被下载折磨的痛不欲生,从那时起便萌生了编写一个简单易用,稳当高效的下载框架,aria经历了1.0到3.0的开发,算是越来越接近当初所制定的目标了。

Aria有以下特点:

下载

Download

compile 'com.arialyy.aria:Aria:3.1.1'

由于Aria涉及到文件和网络的操作,因此需要你在manifest文件中添加以下权限

<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

使用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>
  <!--注意,修改该配置文件中的属性会覆盖代码中所设置的属性-->
  <download>
    <!--设置下载线程,线程下载数改变后,新的下载任务才会生效-->
    <threadNum value="4"/>
    <!--是否打开下载广播,默认为false-->
    <openBroadcast value="false"/>
    <!--设置下载队列最大任务数, 默认为2-->
    <maxTaskNum value="2"/>
    <!--设置下载失败,重试次数,默认为10-->
    <reTryNum value="10"/>
    <!--设置重试间隔,单位为毫秒,默认2000毫秒-->
    <reTryInterval value="2000"/>
    <!--设置url连接超时时间,单位为毫秒,默认5000毫秒-->
    <connectTimeOut value="5000"/>
    <!--设置IO流读取时间,单位为毫秒,默认20000毫秒,该时间不能少于10000毫秒-->
    <iOTimeOut value="20000"/>
    <!--设置写文件buff大小,该数值大小不能小于2048,数值变小,下载速度会变慢-->
    <buffSize value="8192"/>
    <!--设置https ca 证书信息;path 为assets目录下的CA证书完整路径,name 为CA证书名-->
    <ca name="" path=""/>
    <!--是否需要转换速度单位,转换完成后为:1b/s、1k/s、1m/s、1g/s、1t/s,如果不需要将返回byte长度-->
    <cnvertSpeed value="false"/>
  </download>
  <upload>
    <!--是否打开上传广播,默认为false-->
    <openBroadcast value="false"/>
    <!--设置上传队列最大任务数, 默认为2-->
    <maxTaskNum value="2"/>
    <!--设置上传失败,重试次数,默认为10-->
    <reTryNum value="10"/>
    <!--设置重试间隔,单位为毫秒-->
    <reTryInterval value="2000"/>
    <!--设置url连接超时时间,单位为毫秒,默认5000毫秒-->
    <connectTimeOut value="5000"/>
  </upload>
</aria>

代码中设置参数

除了文件方式外修改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.**{*;}
已下载
0