Android多任务并行下载、断点续传

多任务并行下载,断点续传,要做起来其实还是很麻烦的,所以推荐一个开源库,这个开源库叫 Aria,刚好是我前一久搞断点续传时发现的,仔细了解后发现,真香!!!

它简单易用,是个稳当高效的下载框架,不仅可以断点续传,还支持多任务自动调度,更加灵活的事件监听器,让你能更容易的监听暂停、恢复、完成、失败、取消下载等状态。

开源库地址是:https://github.com/AriaLyy/Aria

目前已经有3.2k star,Aria有以下特点:

  • 简单、方便
  • 可以在Activity、Service、Fragment、Dialog、popupWindow、Notification等组件中使用
  • 支持HTTP\FTP断点续传下载、多任务自动调度
  • 支持多文件打包下载,多文件共享同一进度(如:视频 + 封面 + 字幕)
  • 支持下载FTP文件夹
  • 支持HTTP表单上传
  • 支持文件FTP断点续传上传
  • 支持FTPS断点续传
  • 支持https地址下载
  • 支持多线程分块下载,能更有效的发挥机器IO性能
  • 支持300、301、302重定向下载链接下载
  • 支持m3u8协议的文件下载
  • 支持m3u8边下边看的下载支持
  • 下载支持文件长度动态增加,文件下载初始化时将不再占用过多的内存空间


它的使用很简单,下面就简单介绍一下:

引入库

implementation 'com.arialyy.aria:core:3.7.9'
annotationProcessor 'com.arialyy.aria:compiler:3.7.9'
 # 如果需要使用ftp,请增加该组件
implementation 'com.arialyy.aria:ftpComponent:3.7.9'
 # 如果需要使用m3u8下载功能,请增加该组件
implementation 'com.arialyy.aria:m3u8Component:3.7.9'

如果出现android support依赖错误,请将

compile 'com.arialyy.aria:core:<last-version>'

替换为

api('com.arialyy.aria:core:<last-version>'){
   exclude group: 'androidx.appcompat.app'
}

如果你使用的是kotlin,请使用kotlin官方提供的方法配置apt:https://www.kotlincn.net/docs/reference/kapt.html

注:3.7 以上版本已经适配了AndroidX,如果是使用support库的,可使用老版本



使用

由于Aria涉及到文件和网络的操作,因此需要你在manifest文件中添加以下权限,如果你希望在6.0以上的系统中使用Aria,那么你需要动态向安卓系统申请文件系统读写权限。

<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"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>

例子为单任务下载,只需要很简单的代码,便可以实现下载功能。

  • 创建任务
    long taskId = Aria.download(this)
        .load(DOWNLOAD_URL)     //读取下载地址
        .setFilePath(DOWNLOAD_PATH) //设置文件保存的完整路径
        .create();   //创建并启动下载
    
  • 停止\恢复任务
    Aria.download(this)
        .load(taskId)     //读取任务id
        .stop();       // 停止任务
        //.resume();    // 恢复任务
    


任务状态的获取

基于解耦合的考虑,Aria的下载功能是和状态获取相分离的,状态的获取并不会集成到链式代码中,但是Aria提供了另一种更简单更灵活的方案。
通过注解,你可以很容易获取任务的所有状态。

  1. 将对象注册到Aria
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Aria.download(this).register();
}
  1. 通过注解获取任务执行状态
  • 注解回掉采用Apt的方式实现,所以,你不需要担心这会影响你机器的性能
  • 被注解的方法不能被private修饰
  • 被注解的方法只能有一个参数,并且参数类型必须是DownloadTaskUploadTaskDownloadGroupTask
  • 方法名可以为任意字符串
//在这里处理任务执行中的状态,如进度进度条的刷新
@Download.onTaskRunning protected void running(DownloadTask task) {
    if(task.getKey().eques(url)){
        ....
        可以通过url判断是否是指定任务的回调
    }
    int p = task.getPercent();  //任务进度百分比
    String speed = task.getConvertSpeed();  //转换单位后的下载速度,单位转换需要在配置文件中打开
    String speed1 = task.getSpeed(); //原始byte长度速度
}

@Download.onTaskComplete void taskComplete(DownloadTask task) {
    //在这里处理任务完成的状态
}


混淆配置

-dontwarn com.arialyy.aria.**
-keep class com.arialyy.aria.**{*;}
-keep class **$$DownloadListenerProxy{ *; }
-keep class **$$UploadListenerProxy{ *; }
-keep class **$$DownloadGroupListenerProxy{ *; }
-keepclasseswithmembernames class * {
    @Download.* <methods>;
    @Upload.* <methods>;
    @DownloadGroup.* <methods>;
}

更多的使用方式可参考文档:https://aria.laoyuyu.me/aria_doc/

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,294评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,493评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,790评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,595评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,718评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,906评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,053评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,797评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,250评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,570评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,711评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,388评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,018评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,796评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,023评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,461评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,595评论 2 350

推荐阅读更多精彩内容