Android斷點續傳下載器JarvisDownloader

JarvisDownloader

熟悉漫威電影的人都知道Jarvis,他是鋼鐵俠的智能管家,幫助鋼鐵俠製造裝甲、分析大量數據、協助建模等各類智能工做,惋惜在復聯2中,Jarvis與靈魂寶石共同結合成Vision,鋼鐵俠失去了這位如親人通常的智能AI,後來Tony用F.R.I.D.A.Y代替了Jarvis的工做,但從鋼鐵俠與Friday的互動來看,他只把Friday當作通常的AI,並無投入如對待Jarvis的感情。java

最近復聯3上映,中國沒有同步上映,真的太惋惜了,五一原本還想過去香港看,但想到到時會人生人海仍是算了,因此假期閒餘時間就擼了個JarvisDownloader,之因此以Jarvis命名,也是由於我太喜歡Jarvis這個AI了,它屬於人工智能的頂端啊!JarvisDownloader雖然沒有Jarvis那麼強大,但在下載文件方面,具有了不少的優勢。git

jarvis.gif

主要功能

  • 支持斷點續傳下載
  • 支持自定義文件夾路徑、文件名。
  • 支持自定義SQLiteOpenHelper,用於保存下載進度等
  • 下載進度回調時自動切換到UI線程,方便更新UI。
  • 自動與activity綁定生命週期,無需手動釋放
  • activity不可見時,不會更新UI,可見時會自動恢復狀態
  • 支持查詢下載歷史列表
  • 自定義請求頭

使用JarvisDownloader

依賴遠程庫

gradlegithub

repositories {
    
    maven{
        url "https://jitpack.io"
    }
}

dependencies {

	api 'com.github.yuwenque:JarvisDownloader:0.4.0'

}


複製代碼

初始化數據庫

Jarvis.init(new DefaultDownloadHistoryDBHelper(applicationContext));
複製代碼

你也能夠自定義一個繼承於AbsDownloadHistoryDBHelper的管理類,用於保存下載進度等操做,詳細操做請參考DefaultDownloadHistoryDBHelper數據庫

Jarvis.Downloader構建下載任務

請在activity或service中調用api

//構成下載器
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");


//刷新進度的頻率(毫秒),最小值爲100
downloader.refreshTime(1000);

//設置狀態監聽
//假如當前context爲activity的話Jarvis已經自動幫你回調到主線程了,不須要調用activity.runOnUiThread
downloader.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.addExtraRequestProperty("test-key","test-value");

//多個請求頭時,可添加map
Map<String,String> map = new HashMap<>();
map.put("test1","value1");
map.put("test2","value2");
downloader.addExtraRequestPropertyMap(map);

//開始下載
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) {

    }
});


複製代碼

上述代碼也能夠簡化成如下形式bash

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服務器

相關文章
相關標籤/搜索