JarvisDownloader
成都創(chuàng)新互聯(lián)是一家集網(wǎng)站建設(shè),洛龍企業(yè)網(wǎng)站建設(shè),洛龍品牌網(wǎng)站建設(shè),網(wǎng)站定制,洛龍網(wǎng)站建設(shè)報價,網(wǎng)絡(luò)營銷,網(wǎng)絡(luò)優(yōu)化,洛龍網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強企業(yè)競爭力。可充分滿足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時我們時刻保持專業(yè)、時尚、前沿,時刻以成就客戶成長自我,堅持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實用型網(wǎng)站。
熟悉漫威電影的人都知道Jarvis,他是鋼鐵俠的智能管家,幫助鋼鐵俠制造裝甲、分析大量數(shù)據(jù)、協(xié)助建模等各種智能工作,可惜在復(fù)聯(lián)2中,Jarvis與靈魂寶石共同結(jié)合成Vision,鋼鐵俠失去了這位如親人一般的智能AI,后來Tony用F.R.I.D.A.Y代替了Jarvis的工作,但從鋼鐵俠與Friday的互動來看,他只把Friday當做一般的AI,并沒有投入如對待Jarvis的感情。
最近復(fù)聯(lián)3上映,中國沒有同步上映,真的太可惜了,五一本來還想過去香港看,但想到到時會人生人海還是算了,所以假期閑余時間就擼了個 JarvisDownloader ,之所以以Jarvis命名,也是因為我太喜歡Jarvis這個AI了,它屬于人工智能的頂端啊! JarvisDownloader 雖然沒有Jarvis那么強大,但在下載文件方面,具備了很多的優(yōu)點。
主要功能
使用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的管理類,用于保存下載進度等操作,詳細操作請參考 DefaultDownloadHistoryDBHelper
權(quán)限設(shè)置
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è)置下載目錄,非必須,默認目錄為 Environment.getExternalStorageDirectory()+File.separator+"Jarvis" downloader.filePath(Environment.getExternalStorageDirectory() + File.separator + "Jarvis"); //設(shè)置文件名,非必須,但建議手動設(shè)置,默認為服務(wù)器文件的名字 downloader.fileName("test.jpg"); //刷新進度的頻率(毫秒),最小值為100 downloader.refreshTime(1000); //設(shè)置狀態(tài)監(jiān)聽 //假如當前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 當前下載的文件大小 * @param progress 當前進度 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 刪除成功標志位 */ @Override public void onDelete(boolean b) { } }); //開始下載 downloader.download(); //手動暫停 downloader.pause(); //恢復(fù)下載 downloader.recovery(); //手動刪除本地記錄,但不刪除文件,文件下載過程中不允許刪除 downloader.delete(); //刪除下載記錄以及文件,文件下載過程中不允許刪除 downloader.deleteCacheFile(); //獲取當前的下載狀態(tài) downloader.getDownloadState(); //同步獲取上次下載的進度,由于是查詢數(shù)據(jù)庫的操作,所以建議新開線程來獲取 downloader.getDownloadedProgress(); //異步獲取下載進度 downloader.getDownloadedProgress(new DataCallBack() { @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>() { @Override public void onData(List
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è)置下載的線程池長度,如果當前有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í)有所幫助,也希望大家多多支持創(chuàng)新互聯(lián)。