JarvisDownloader
熟悉漫威電影的人都知道Jarvis,他是鋼鐵俠的智能管家,幫助鋼鐵俠制造裝甲、分析大量數據、協助建模等各種智能工作,可惜在復聯2中,Jarvis與靈魂寶石共同結合成Vision,鋼鐵俠失去了這位如親人一般的智能AI,后來Tony用F.R.I.D.A.Y代替了Jarvis的工作,但從鋼鐵俠與Friday的互動來看,他只把Friday當做一般的AI,并沒有投入如對待Jarvis的感情。
最近復聯3上映,中國沒有同步上映,真的太可惜了,五一本來還想過去香港看,但想到到時會人生人海還是算了,所以假期閑余時間就擼了個 JarvisDownloader ,之所以以Jarvis命名,也是因為我太喜歡Jarvis這個AI了,它屬于人工智能的頂端啊! JarvisDownloader 雖然沒有Jarvis那么強大,但在下載文件方面,具備了很多的優點。
主要功能
使用JarvisDownloader
依賴遠程庫
gradle
repositories { maven{ url "https://jitpack.io" }}dependencies { api 'com.github.yuwenque:JarvisDownloader:0.2.0'}
初始化數據庫
Jarvis.init(new DefaultDownloadHistoryDBHelper(applicationContext));
你也可以自定義一個繼承于AbsDownloadHistoryDBHelper的管理類,用于保存下載進度等操作,詳細操作請參考 DefaultDownloadHistoryDBHelper
權限設置
<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構建下載任務
請在activity或service中調用
//構成下載器Jarvis.Downloader downloader = Jarvis.with(this).withUrl("http://pic1.win4000.com/wallpaper/2017-10-11/59dde2bca944f.jpg");//是否允許ui不可見時繼續下載downloader.allowBackgroundDownload(true);//多線程下載數量downloader.threadCount(3);//設置下載目錄,非必須,默認目錄為 Environment.getExternalStorageDirectory()+File.separator+"Jarvis"downloader.filePath(Environment.getExternalStorageDirectory() + File.separator + "Jarvis");//設置文件名,非必須,但建議手動設置,默認為服務器文件的名字downloader.fileName("test.jpg");//刷新進度的頻率(毫秒),最小值為100downloader.refreshTime(1000);//設置狀態監聽//假如當前context為activity的話Jarvis已經自動幫你回調到主線程了,不需要調用activity.runOnUiThreaddownloader.setDownloadListener(new DownloadListener() { /** * 文件下載完畢回調 * @param file */ @Override public void onSuccess(File file) { } /** * 進度回調 * @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();//恢復下載downloader.recovery();//手動刪除本地記錄,但不刪除文件,文件下載過程中不允許刪除downloader.delete();//刪除下載記錄以及文件,文件下載過程中不允許刪除downloader.deleteCacheFile();//獲取當前的下載狀態downloader.getDownloadState();//同步獲取上次下載的進度,由于是查詢數據庫的操作,所以建議新開線程來獲取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管理下載任務
//異步獲取下載歷史記錄,下載進度請自己計算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(); }});//停止所有下載任務Jarvis.getInstance().pauseAllDownloader();//開始所有下載任務Jarvis.getInstance().startAllDownload();//刪除所有下載任務及文件Jarvis.getInstance().forceDeleteAll();//設置下載的線程池長度,如果當前有10個下載任務,//每個任務開啟3個線程進行斷點續傳下載,那么此時只設置20個的話,將有部分下載任務需等待其他線程執行完任務才能開始Jarvis.getInstance().initThreadPoolLength(20);
源碼閱讀請跳轉到 https://github.com/yuwenque/JarvisDownloader
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。
新聞熱點
疑難解答