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邊下邊看的下載支持
  • 下載支持文件長度動態增加,文件下載初始化時將不再佔用過多的內存空間


它的使用很簡單,下面就簡單介紹一下:

引入庫

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

如果出現android support依賴錯誤,請將

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

替換為

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

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

注:3.7 以上版本已經適配了AndroidX,如果是使用support庫的,可使用老版本



使用

由於Aria涉及到文件和網絡的操作,因此需要你在manifest文件中添加以下權限,如果你希望在6.0以上的系統中使用Aria,那麼你需要動態向安卓系統申請文件系統讀寫權限。

<code><uses-permission>
<uses-permission>
<uses-permission>
<uses-permission>
<uses-permission>
/<code>

例子為單任務下載,只需要很簡單的代碼,便可以實現下載功能。

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


任務狀態的獲取

基於解耦合的考慮,Aria的下載功能是和狀態獲取相分離的,狀態的獲取並不會集成到鏈式代碼中,但是Aria提供了另一種更簡單更靈活的方案。


通過註解,你可以很容易獲取任務的所有狀態。

  1. 將對象註冊到Aria
<code>protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Aria.download(this).register();
}
/<code>
  1. 通過註解獲取任務執行狀態
  • 註解回掉採用Apt的方式實現,所以,你不需要擔心這會影響你機器的性能
  • 被註解的方法不能被private修飾
  • 被註解的方法只能有一個參數,並且參數類型必須是DownloadTask或UploadTask或DownloadGroupTask
  • 方法名可以為任意字符串
<code>//在這裡處理任務執行中的狀態,如進度進度條的刷新
@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) {
//在這裡處理任務完成的狀態
}
/<code>


混淆配置

<code>-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>;
}

/<methods>/<methods>/<methods>/<code>

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


Android多任務並行下載、斷點續傳



分享到:


相關文章: