Android實(shí)現(xiàn)多線(xiàn)程斷點(diǎn)下載
QDownload
QDownload是基于Android平臺(tái)實(shí)現(xiàn)的下載框架。API簡(jiǎn)潔易上手,只需5分鐘即可實(shí)現(xiàn)一個(gè)多任務(wù)、多線(xiàn)程、斷點(diǎn)下載的功能
支持功能如下:
支持多個(gè)下載任務(wù)同時(shí)下載單個(gè)任務(wù)支持開(kāi)多個(gè)線(xiàn)程下載支持?jǐn)帱c(diǎn)下載,在斷網(wǎng)、進(jìn)程被劃掉可恢復(fù)下載自動(dòng)校驗(yàn)服務(wù)器文件服務(wù)器是否支持?jǐn)帱c(diǎn)下載,如果不支持則會(huì)開(kāi)啟單線(xiàn)程任務(wù)下載支持應(yīng)用全局監(jiān)聽(tīng)下載進(jìn)度回調(diào)支持下載速度顯示支持添加下載任務(wù),暫停下載,恢復(fù)下載,取消下載支持批量暫停,批量恢復(fù)下載
先貼個(gè)效果圖
主頁(yè)

多任務(wù)多線(xiàn)程斷點(diǎn)下載頁(yè)面

1、如何使用
1.1、導(dǎo)入依賴(lài)
implementation 'com.qw.download:download:1.0.0-alpha01'
1.2、初始化下載組件
public class MyApplication extends Application{
@Override
public void onCreate() {
super.onCreate();
//初始化下載組件(可在子線(xiàn)程中做)
DownloadManager.init(this);
}
}
1.3、核心控制器DownloadManager
api如下
public class DownloadManager {
private static DownloadManager mInstance;
private final Context context;
private DownloadManager(Context context) {}
//初始化組件
public static void init(Context context) {}
//開(kāi)啟下載
public static void add(DownloadEntry entry) {}
//暫停下載
public static void pause(DownloadEntry entry) {}
//暫停所有任務(wù)
public static void pauseAll() {}
//恢復(fù)下載
public static void resume(DownloadEntry entry) {}
//恢復(fù)所有任務(wù)
public static void recoverAll() {}
}
1.4、監(jiān)聽(tīng)下載進(jìn)度
需要監(jiān)聽(tīng)下載進(jìn)度可通過(guò)注冊(cè)DownloadWatcher來(lái)監(jiān)聽(tīng)下載信息的變化
private DownloadWatcher watcher = new DownloadWatcher() {
@Override
protected void onDataChanged(DownloadEntiry entry) {
//這里監(jiān)聽(tīng)下載的實(shí)時(shí)信息
mDownloadInfoLabel.setText(entry.toString());
Log.e("MainActivity", entry.toString());
}
};
@Override
protected void onResume() {
super.onResume();
//注冊(cè)觀察者
DownloadManager.addObserver(watcher);
}
@Override
protected void onPause() {
super.onPause();
//移除觀察者
DownloadManager.removeObserver(watcher);
}
其中第3行 DownloadEntiry entry 存儲(chǔ)了下載相關(guān)信息
public class DownloadEntry implements Serializable {
public String id;//下載的唯一標(biāo)識(shí)
public String url;//下載文件的url地址
public boolean isSupportRange;//是否支持?jǐn)帱c(diǎn)續(xù)傳
public long contentLength;//文件長(zhǎng)度
public long currentLength;//已下載文件長(zhǎng)度
public State state;//任務(wù)狀態(tài)
public HashMap<Integer, Long> ranges;//存儲(chǔ)每個(gè)線(xiàn)程下載開(kāi)始區(qū)塊
public int speed;//下載速度 單位s
}
其中state有如下幾個(gè)值
public enum State {
IDLE,//空閑
CONNECT,//連接中(用戶(hù)預(yù)取文件信息)
ING,//下載中
PAUSED,//已暫停
CANCELLED,//已取消
ERROR,//錯(cuò)誤
DONE,//完成
WAIT//等待
}
1.5、下載相關(guān)的操作
添加一個(gè)下載
通過(guò)DownloadEntry構(gòu)建下載實(shí)體
public void addDownload(String id,String url){
//id為任務(wù)的一個(gè)唯一標(biāo)識(shí),url為文件地址
DownloadEntry entry = DownloadEntry.obtain(id,url)
//添加一個(gè)下載任務(wù)
DownloadManager.add(entry)
}
暫停下載
可通過(guò)下載任務(wù)id 然后調(diào)用DownloadManager.findById(id) 函數(shù)獲取DownloadEntry
public void pauseDownload(DownloadEntry entry){
//添加一個(gè)下載任務(wù)
DownloadManager.pause(entry)
}
恢復(fù)下載
public void resumeDownload(DownloadEntry entry){
//添加一個(gè)下載任務(wù)
DownloadManager.resume(entry)
}
暫停所有下載任務(wù)
public void pauseAll(DownloadEntry entry){
//添加一個(gè)下載任務(wù)
DownloadManager.resume(entry)
}
恢復(fù)所有下載任務(wù)
public void recoverAll(DownloadEntry entry){
//添加一個(gè)下載任務(wù)
DownloadManager.recoverAll(entry)
}
1.6、應(yīng)用市場(chǎng)apk下載的一個(gè)場(chǎng)景
ApkEntry實(shí)體數(shù)據(jù)用來(lái)描述apk的基本信息
public class ApkEntry {
public String id;//包id
public String cover;//apk 圖標(biāo)
public String name;//apk 名稱(chēng)
public String url;//apk 下載地址
public long length;//apk 大小
public String id() {
if (TextUtils.isEmpty(id)) {
//如果服務(wù)端沒(méi)有返回唯一標(biāo)記則用url的md5值作為下載唯一標(biāo)識(shí)
id = FileUtilities.getMd5FileName(url);
}
return id;
}
}
這是我要下載這個(gè)apk就可以這么做
public void downloadApk(ApkEntry apkEntry){
//1、先check當(dāng)前apk是否在下載
DownloadEntry entry = DownloadManager.findById(apkEntry.id())
if(entry==null || entry.state==State.PAUSED || entry.state==State.ERROR || entry.state==State.CANCELLED){
//這四種情況:沒(méi)有下載任務(wù) || 任務(wù)是暫停 || 下載失敗 || 任務(wù)已被取消
DownloadManager.add(entry)
}
}
暫停apk下載
public void pauseDownloadApk(ApkEntry apkEntry){
//1、先check當(dāng)前apk是否在下載任務(wù)中
DownloadEntry entry = DownloadManager.findById(apkEntry.id())
if(entry!=null){
DownloadManager.pause(entry)
}
}
總結(jié)
到此這篇關(guān)于Android實(shí)現(xiàn)多線(xiàn)程斷點(diǎn)下載的文章就介紹到這了,更多相關(guān)Android多線(xiàn)程斷點(diǎn)下載內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
什么是Android靜默拍攝 Android靜默拍攝app制作方法
這篇文章主要告訴大家什么是Android靜默拍攝,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-03-03
???????Android?H5通用容器架構(gòu)設(shè)計(jì)詳解
這篇文章主要介紹了???????Android?H5通用容器架構(gòu)設(shè)計(jì)詳解,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-09-09
Android RatingBar星星評(píng)分控件實(shí)例代碼
本文通過(guò)實(shí)例代碼給大家介紹了Android RatingBar星星評(píng)分控件,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友參考下吧2017-06-06
Android SQLite數(shù)據(jù)庫(kù)操作代碼類(lèi)分享
這篇文章主要介紹了Android SQLite數(shù)據(jù)庫(kù)操作代碼類(lèi)分享,本文直接給出實(shí)現(xiàn)代碼和使用代碼,需要的朋友可以參考下2015-03-03
Android實(shí)現(xiàn)橡皮筋回彈和平移縮放效果
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)橡皮筋回彈和平移縮放效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-04-04
Android入門(mén)之Gallery用法實(shí)例解析
這篇文章主要介紹了Android入門(mén)之Gallery用法,對(duì)Android初學(xué)者有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2014-08-08
Android App中使用RatingBar實(shí)現(xiàn)星級(jí)打分功能的教程
這篇文章主要介紹了Android App中使用RatingBar實(shí)現(xiàn)星級(jí)打分功能的教程,文中舉了一個(gè)使用SeekBar與RatingBar制作的應(yīng)用內(nèi)打分條的功能,非常簡(jiǎn)單,需要的朋友可以參考下2016-04-04

