android自定义下载框架,Android_DownloadUtil
軟件簡介
Aria
Aria項目源于15年工作中遇到的一個文件下載管理的需求,當時被下載折磨的痛不欲生,從那時起便萌生了編寫一個簡單易用,穩當高效的下載框架,aria經歷了1.0到3.0的開發,算是越來越接近當初所制定的目標了。
Aria有以下特點:
簡單、方便 可以在Activity、Service、Fragment、Dialog、popupWindow、Notification等組件中使用
支持任務自動調度,使用者不需要關心任務狀態切換的邏輯
支持https地址下載 在配置文件中很容易就可以設置CA證書的信息
支持300、301、302重定向下載鏈接下載
支持上傳操作
Aria怎樣使用?
如果你覺得Aria對你有幫助,您的star和issues將是對我最大支持.^_^
下載
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目錄下,添加以下內容
代碼中設置參數
除了文件方式外修改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.**{*;}
其他
有任何問題,可以在issues給我留言反饋。
后續版本開發規劃
實現上傳隊列調度功能
開發日志
v_3.1.0 添加Aria配置文件,優化代碼
v_3.0.3 修復暫停后刪除任務,閃退問題,添加刪除記錄的api
v_3.0.2 支持30x重定向鏈接下載
v_3.0.0 添加上傳任務支持,修復一些已發現的bug
v_2.4.4 修復不支持斷點的下載鏈接拿不到文件大小的問題
v_2.4.3 修復404鏈接卡頓的問題
v_2.4.2 修復失敗重試無效的bug
v_2.4.1 修復下載慢的問題,修復application、service 不能使用的問題
v_2.4.0 支持https鏈接下載
v_2.3.8 修復數據錯亂的bug、添加fragment支持
v_2.3.6 添加dialog、popupWindow支持
v_2.3.3 添加斷點支持、修改下載邏輯,讓使用更加簡單、修復一個內存泄露的bug
v_2.3.1 重命名為Aria,下載流程簡化
v_2.1.1 增加,選擇最大下載任務數接口
License
Copyright 2016 AriaLyy(https://github.com/AriaLyy/Aria)
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
總結
以上是生活随笔為你收集整理的android自定义下载框架,Android_DownloadUtil的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c语言指针底层实现,C语言二级指针底层实
- 下一篇: android封装多肽,深度探索C++对