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,并沒有投入如對待Jarvis的感情。
最近復(fù)聯(lián)3上映,中國沒有同步上映,真的太可惜了,五一本來還想過去香港看,但想到到時(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綁定生命周期,無需手動(dòng)釋放
- activity不可見時(shí),不會(huì)更新UI,可見時(shí)會(huì)自動(dòng)恢復(fù)狀態(tài)
- 支持查詢下載歷史列表
使用JarvisDownloader
依賴遠(yuǎn)程庫
gradle
repositories { maven{ url "https://jitpack.io" } } dependencies { api 'com.github.yuwenque:JarvisDownloader:0.2.0' }
初始化數(shù)據(jù)庫
Jarvis.init(new DefaultDownloadHistoryDBHelper(applicationContext));
你也可以自定義一個(gè)繼承于AbsDownloadHistoryDBHelper的管理類,用于保存下載進(jìn)度等操作,詳細(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ù)
請?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ù)庫的操作,所以建議新開線程來獲取 downloader.getDownloadedProgress(); //異步獲取下載進(jìn)度 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ù)
//異步獲取下載歷史記錄,下載進(jìn)度請自己計(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è)置下載的線程池長度,如果當(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);
源碼閱讀請?zhí)D(zhuǎn)到 https://github.com/yuwenque/JarvisDownloader
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Android實(shí)現(xià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]淺談簡單好用的Android頁面路由框架
這篇文章主要介紹了[Alibaba-ARouter]淺談簡單好用的Android頁面路由框架,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-11-11Android編程之繪制文本(FontMetrics)實(shí)現(xiàn)方法
這篇文章主要介紹了Android編程之繪制文本(FontMetrics)實(shí)現(xiàn)方法,結(jié)合實(shí)例形式較為詳細(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新建與編譯項(xiàng)目速度慢解決辦法
這篇文章主要介紹了關(guān)于AndroidStudio新建與編譯項(xiàng)目速度慢的解決辦法,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-10-10Android中實(shí)現(xiàn)開機(jī)自動(dòng)啟動(dòng)服務(wù)(service)實(shí)例
這篇文章主要介紹了Android中實(shí)現(xiàn)自動(dòng)啟動(dòng)服務(wù)實(shí)例,并開機(jī)自動(dòng)啟用(無activity),的朋友可以參考下2014-06-06Android開發(fā)之瀏覽器用法實(shí)例詳解(調(diào)用uc,opera,qq瀏覽器訪問網(wǎng)頁)
這篇文章主要介紹了Android開發(fā)之瀏覽器用法,結(jié)合實(shí)例形式詳細(xì)分析了Android調(diào)用瀏覽器的具體步驟與相關(guān)使用技巧,需要的朋友可以參考下2016-01-01Android自定義View繪制隨機(jī)生成圖片驗(yàn)證碼
這篇文章主要為大家詳細(xì)介紹了Android自定義View繪制隨機(jī)生成圖片驗(yàn)證碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-09-09Android屏幕旋轉(zhuǎn)之橫屏豎屏切換的實(shí)現(xiàn)
這篇文章主要介紹了Android屏幕旋轉(zhuǎn)之橫屏豎屏切換的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-10-10