Android斷點(diǎn)續(xù)傳下載器JarvisDownloader的示例
JarvisDownloader
熟悉漫威電影的人都知道Jarvis,他是鋼鐵俠的智能管家,幫助鋼鐵俠制造裝甲、分析大量數(shù)據(jù)、協(xié)助建模等各種智能工作,可惜在復(fù)聯(lián)2中,Jarvis與靈魂寶石共同結(jié)合成Vision,鋼鐵俠失去了這位如親人一般的智能AI,后來Tony用F.R.I.D.A.Y代替了Jarvis的工作,但從鋼鐵俠與Friday的互動(dòng)來看,他只把Friday當(dāng)做一般的AI,并沒有投入如對(duì)待Jarvis的感情。
最近復(fù)聯(lián)3上映,中國(guó)沒有同步上映,真的太可惜了,五一本來還想過去香港看,但想到到時(shí)會(huì)人生人海還是算了,所以假期閑余時(shí)間就擼了個(gè) JarvisDownloader ,之所以以Jarvis命名,也是因?yàn)槲姨矚gJarvis這個(gè)AI了,它屬于人工智能的頂端??! JarvisDownloader 雖然沒有Jarvis那么強(qiáng)大,但在下載文件方面,具備了很多的優(yōu)點(diǎn)。

主要功能
- 支持?jǐn)帱c(diǎn)續(xù)傳下載
- 支持自定義文件夾路徑、文件名。
- 支持自定義SQLiteOpenHelper,用于保存下載進(jìn)度等
- 下載進(jìn)度回調(diào)時(shí)自動(dòng)切換到UI線程,方便更新UI。
- 自動(dòng)與activity綁定生命周期,無(wú)需手動(dòng)釋放
- activity不可見時(shí),不會(huì)更新UI,可見時(shí)會(huì)自動(dòng)恢復(fù)狀態(tài)
- 支持查詢下載歷史列表
使用JarvisDownloader
依賴遠(yuǎn)程庫(kù)
gradle
repositories {
maven{
url "https://jitpack.io"
}
}
dependencies {
api 'com.github.yuwenque:JarvisDownloader:0.2.0'
}
初始化數(shù)據(jù)庫(kù)
Jarvis.init(new DefaultDownloadHistoryDBHelper(applicationContext));
你也可以自定義一個(gè)繼承于AbsDownloadHistoryDBHelper的管理類,用于保存下載進(jìn)度等操作,詳細(xì)操作請(qǐng)參考 DefaultDownloadHistoryDBHelper
權(quán)限設(shè)置
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
Jarvis.Downloader構(gòu)建下載任務(wù)
請(qǐng)?jiān)赼ctivity或service中調(diào)用
//構(gòu)成下載器
Jarvis.Downloader downloader = Jarvis.with(this).withUrl("http://pic1.win4000.com/wallpaper/2017-10-11/59dde2bca944f.jpg");
//是否允許ui不可見時(shí)繼續(xù)下載
downloader.allowBackgroundDownload(true);
//多線程下載數(shù)量
downloader.threadCount(3);
//設(shè)置下載目錄,非必須,默認(rèn)目錄為 Environment.getExternalStorageDirectory()+File.separator+"Jarvis"
downloader.filePath(Environment.getExternalStorageDirectory() + File.separator + "Jarvis");
//設(shè)置文件名,非必須,但建議手動(dòng)設(shè)置,默認(rèn)為服務(wù)器文件的名字
downloader.fileName("test.jpg");
//刷新進(jìn)度的頻率(毫秒),最小值為100
downloader.refreshTime(1000);
//設(shè)置狀態(tài)監(jiān)聽
//假如當(dāng)前context為activity的話Jarvis已經(jīng)自動(dòng)幫你回調(diào)到主線程了,不需要調(diào)用activity.runOnUiThread
downloader.setDownloadListener(new DownloadListener() {
/**
* 文件下載完畢回調(diào)
* @param file
*/
@Override
public void onSuccess(File file) {
}
/**
* 進(jìn)度回調(diào)
* @param downloadedSize 當(dāng)前下載的文件大小
* @param progress 當(dāng)前進(jìn)度 0-1.0
*/
@Override
public void onProgress(long downloadedSize, float progress) {
}
/**
* 開始下載時(shí)
*/
@Override
public void onStart() {
}
/**
* 下載暫停時(shí)
*/
@Override
public void onPause() {
}
/**
* 下載失敗時(shí)
*/
@Override
public void onFail() {
}
/**
* 被刪除時(shí)
* @param b 刪除成功標(biāo)志位
*/
@Override
public void onDelete(boolean b) {
}
});
//開始下載
downloader.download();
//手動(dòng)暫停
downloader.pause();
//恢復(fù)下載
downloader.recovery();
//手動(dòng)刪除本地記錄,但不刪除文件,文件下載過程中不允許刪除
downloader.delete();
//刪除下載記錄以及文件,文件下載過程中不允許刪除
downloader.deleteCacheFile();
//獲取當(dāng)前的下載狀態(tài)
downloader.getDownloadState();
//同步獲取上次下載的進(jìn)度,由于是查詢數(shù)據(jù)庫(kù)的操作,所以建議新開線程來獲取
downloader.getDownloadedProgress();
//異步獲取下載進(jìn)度
downloader.getDownloadedProgress(new DataCallBack<Float>() {
@Override
public void onData(Float progress) {
}
});
上述代碼也可以簡(jiǎn)化成以下形式
Jarvis.with(this)
.withUrl("http://pic1.win4000.com/wallpaper/2017-10-11/59dde2bca944f.jpg")
.allowBackgroundDownload(true)
.threadCount(3)
.filePath(Environment.getExternalStorageDirectory() + File.separator + "Jarvis")
.fileName("test.jpg")
.refreshTime(1000)
.setDownloadListener(listener).download();
Jarvis管理下載任務(wù)
//異步獲取下載歷史記錄,下載進(jìn)度請(qǐng)自己計(jì)算
Jarvis.getInstance().getDownloadedList(new DataCallBack<List<LocalFileRecordBean>>() {
@Override
public void onData(List<LocalFileRecordBean> localFileRecordBeans) {
LocalFileRecordBean fileRecordBean= localFileRecordBeans.get(0);
//下載進(jìn)度
float progress = fileRecordBean.getDownloadedLength()*1.0f/fileRecordBean.getFileTotalLength();
}
});
//停止所有下載任務(wù)
Jarvis.getInstance().pauseAllDownloader();
//開始所有下載任務(wù)
Jarvis.getInstance().startAllDownload();
//刪除所有下載任務(wù)及文件
Jarvis.getInstance().forceDeleteAll();
//設(shè)置下載的線程池長(zhǎng)度,如果當(dāng)前有10個(gè)下載任務(wù),
//每個(gè)任務(wù)開啟3個(gè)線程進(jìn)行斷點(diǎn)續(xù)傳下載,那么此時(shí)只設(shè)置20個(gè)的話,將有部分下載任務(wù)需等待其他線程執(zhí)行完任務(wù)才能開始
Jarvis.getInstance().initThreadPoolLength(20);
源碼閱讀請(qǐng)?zhí)D(zhuǎn)到 https://github.com/yuwenque/JarvisDownloader
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Android實(shí)現(xiàn)簡(jiǎn)單斷點(diǎn)續(xù)傳和下載到本地功能
- Android實(shí)現(xiàn)網(wǎng)絡(luò)多線程斷點(diǎn)續(xù)傳下載功能
- Android多線程斷點(diǎn)續(xù)傳下載功能實(shí)現(xiàn)代碼
- android使用OkHttp實(shí)現(xiàn)下載的進(jìn)度監(jiān)聽和斷點(diǎn)續(xù)傳
- android實(shí)現(xiàn)多線程下載文件(支持暫停、取消、斷點(diǎn)續(xù)傳)
- Android 斷點(diǎn)續(xù)傳原理以及實(shí)現(xiàn)
- Android實(shí)現(xiàn)網(wǎng)絡(luò)多線程斷點(diǎn)續(xù)傳下載實(shí)例
- Android 斷點(diǎn)續(xù)傳的原理剖析與實(shí)例講解
- Android編程開發(fā)實(shí)現(xiàn)多線程斷點(diǎn)續(xù)傳下載器實(shí)例
相關(guān)文章
[Alibaba-ARouter]淺談簡(jiǎn)單好用的Android頁(yè)面路由框架
這篇文章主要介紹了[Alibaba-ARouter]淺談簡(jiǎn)單好用的Android頁(yè)面路由框架,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-11-11
Android編程之繪制文本(FontMetrics)實(shí)現(xiàn)方法
這篇文章主要介紹了Android編程之繪制文本(FontMetrics)實(shí)現(xiàn)方法,結(jié)合實(shí)例形式較為詳細(xì)的分析了Android使用FontMetrics對(duì)象繪制文本的相關(guān)技巧,需要的朋友可以參考下2015-12-12
詳解Android業(yè)務(wù)組件化之URL Schema使用
這篇文章主要為大家詳細(xì)介紹了Android業(yè)務(wù)組件化之URL Schema使用,感興趣的小伙伴們可以參考一下2016-09-09
關(guān)于AndroidStudio新建與編譯項(xiàng)目速度慢解決辦法
這篇文章主要介紹了關(guān)于AndroidStudio新建與編譯項(xiàng)目速度慢的解決辦法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-10-10
Android中實(shí)現(xiàn)開機(jī)自動(dòng)啟動(dòng)服務(wù)(service)實(shí)例
這篇文章主要介紹了Android中實(shí)現(xiàn)自動(dòng)啟動(dòng)服務(wù)實(shí)例,并開機(jī)自動(dòng)啟用(無(wú)activity),的朋友可以參考下2014-06-06
Android開發(fā)之瀏覽器用法實(shí)例詳解(調(diào)用uc,opera,qq瀏覽器訪問網(wǎng)頁(yè))
這篇文章主要介紹了Android開發(fā)之瀏覽器用法,結(jié)合實(shí)例形式詳細(xì)分析了Android調(diào)用瀏覽器的具體步驟與相關(guān)使用技巧,需要的朋友可以參考下2016-01-01
Android自定義View繪制隨機(jī)生成圖片驗(yàn)證碼
這篇文章主要為大家詳細(xì)介紹了Android自定義View繪制隨機(jī)生成圖片驗(yàn)證碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-09-09
Android屏幕旋轉(zhuǎn)之橫屏豎屏切換的實(shí)現(xiàn)
這篇文章主要介紹了Android屏幕旋轉(zhuǎn)之橫屏豎屏切換的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-10-10

