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

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

