Android多任務(wù)并行下載、斷點(diǎn)續(xù)傳

多任務(wù)并行下載,斷點(diǎn)續(xù)傳,要做起來(lái)其實(shí)還是很麻煩的,所以推薦一個(gè)開(kāi)源庫(kù),這個(gè)開(kāi)源庫(kù)叫 Aria,剛好是我前一久搞斷點(diǎn)續(xù)傳時(shí)發(fā)現(xiàn)的,仔細(xì)了解后發(fā)現(xiàn),真香!?。?/p>

它簡(jiǎn)單易用,是個(gè)穩(wěn)當(dāng)高效的下載框架,不僅可以斷點(diǎn)續(xù)傳,還支持多任務(wù)自動(dòng)調(diào)度,更加靈活的事件監(jiān)聽(tīng)器,讓你能更容易的監(jiān)聽(tīng)暫停、恢復(fù)、完成、失敗、取消下載等狀態(tài)。

開(kāi)源庫(kù)地址是:https://github.com/AriaLyy/Aria

目前已經(jīng)有3.2k star,Aria有以下特點(diǎn):

  • 簡(jiǎn)單、方便
  • 可以在Activity、Service、Fragment、Dialog、popupWindow、Notification等組件中使用
  • 支持HTTP\FTP斷點(diǎn)續(xù)傳下載、多任務(wù)自動(dòng)調(diào)度
  • 支持多文件打包下載,多文件共享同一進(jìn)度(如:視頻 + 封面 + 字幕)
  • 支持下載FTP文件夾
  • 支持HTTP表單上傳
  • 支持文件FTP斷點(diǎn)續(xù)傳上傳
  • 支持FTPS斷點(diǎn)續(xù)傳
  • 支持https地址下載
  • 支持多線程分塊下載,能更有效的發(fā)揮機(jī)器IO性能
  • 支持300、301、302重定向下載鏈接下載
  • 支持m3u8協(xié)議的文件下載
  • 支持m3u8邊下邊看的下載支持
  • 下載支持文件長(zhǎng)度動(dòng)態(tài)增加,文件下載初始化時(shí)將不再占用過(guò)多的內(nèi)存空間


它的使用很簡(jiǎn)單,下面就簡(jiǎn)單介紹一下:

引入庫(kù)

implementation 'com.arialyy.aria:core:3.7.9'
annotationProcessor 'com.arialyy.aria:compiler:3.7.9'
 # 如果需要使用ftp,請(qǐng)?jiān)黾釉摻M件
implementation 'com.arialyy.aria:ftpComponent:3.7.9'
 # 如果需要使用m3u8下載功能,請(qǐng)?jiān)黾釉摻M件
implementation 'com.arialyy.aria:m3u8Component:3.7.9'

如果出現(xiàn)android support依賴錯(cuò)誤,請(qǐng)將

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

替換為

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

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

注:3.7 以上版本已經(jīng)適配了AndroidX,如果是使用support庫(kù)的,可使用老版本



使用

由于Aria涉及到文件和網(wǎng)絡(luò)的操作,因此需要你在manifest文件中添加以下權(quán)限,如果你希望在6.0以上的系統(tǒng)中使用Aria,那么你需要?jiǎng)討B(tài)向安卓系統(tǒng)申請(qǐng)文件系統(tǒng)讀寫(xiě)權(quán)限。

<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"/>

例子為單任務(wù)下載,只需要很簡(jiǎn)單的代碼,便可以實(shí)現(xiàn)下載功能。

  • 創(chuàng)建任務(wù)
    long taskId = Aria.download(this)
        .load(DOWNLOAD_URL)     //讀取下載地址
        .setFilePath(DOWNLOAD_PATH) //設(shè)置文件保存的完整路徑
        .create();   //創(chuàng)建并啟動(dòng)下載
    
  • 停止\恢復(fù)任務(wù)
    Aria.download(this)
        .load(taskId)     //讀取任務(wù)id
        .stop();       // 停止任務(wù)
        //.resume();    // 恢復(fù)任務(wù)
    


任務(wù)狀態(tài)的獲取

基于解耦合的考慮,Aria的下載功能是和狀態(tài)獲取相分離的,狀態(tài)的獲取并不會(huì)集成到鏈?zhǔn)酱a中,但是Aria提供了另一種更簡(jiǎn)單更靈活的方案。
通過(guò)注解,你可以很容易獲取任務(wù)的所有狀態(tài)。

  1. 將對(duì)象注冊(cè)到Aria
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Aria.download(this).register();
}
  1. 通過(guò)注解獲取任務(wù)執(zhí)行狀態(tài)
  • 注解回掉采用Apt的方式實(shí)現(xiàn),所以,你不需要擔(dān)心這會(huì)影響你機(jī)器的性能
  • 被注解的方法不能被private修飾
  • 被注解的方法只能有一個(gè)參數(shù),并且參數(shù)類型必須是DownloadTaskUploadTaskDownloadGroupTask
  • 方法名可以為任意字符串
//在這里處理任務(wù)執(zhí)行中的狀態(tài),如進(jìn)度進(jìn)度條的刷新
@Download.onTaskRunning protected void running(DownloadTask task) {
    if(task.getKey().eques(url)){
        ....
        可以通過(guò)url判斷是否是指定任務(wù)的回調(diào)
    }
    int p = task.getPercent();  //任務(wù)進(jìn)度百分比
    String speed = task.getConvertSpeed();  //轉(zhuǎn)換單位后的下載速度,單位轉(zhuǎn)換需要在配置文件中打開(kāi)
    String speed1 = task.getSpeed(); //原始byte長(zhǎng)度速度
}

@Download.onTaskComplete void taskComplete(DownloadTask task) {
    //在這里處理任務(wù)完成的狀態(tài)
}


混淆配置

-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/

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容