亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Android實現(xiàn)多線程斷點下載

 更新時間:2022年01月29日 10:04:42   作者:qinwei1993  
大家好,本篇文章主要講的是Android實現(xiàn)多線程斷點下載,感興趣的同學趕快來看一看吧,對你有幫助的話記得收藏一下

QDownload

QDownload是基于Android平臺實現(xiàn)的下載框架。API簡潔易上手,只需5分鐘即可實現(xiàn)一個多任務、多線程、斷點下載的功能

支持功能如下:

支持多個下載任務同時下載單個任務支持開多個線程下載支持斷點下載,在斷網(wǎng)、進程被劃掉可恢復下載自動校驗服務器文件服務器是否支持斷點下載,如果不支持則會開啟單線程任務下載支持應用全局監(jiān)聽下載進度回調(diào)支持下載速度顯示支持添加下載任務,暫停下載,恢復下載,取消下載支持批量暫停,批量恢復下載

先貼個效果圖

主頁

device-2022-01-28-204742.png

多任務多線程斷點下載頁面

device-2022-01-28-204810.png

1、如何使用

1.1、導入依賴

implementation 'com.qw.download:download:1.0.0-alpha01'

1.2、初始化下載組件

public class MyApplication extends Application{
    @Override
    public void onCreate() {
        super.onCreate();
        //初始化下載組件(可在子線程中做)
        DownloadManager.init(this);
    }    
}

1.3、核心控制器DownloadManager

api如下

public class DownloadManager {
    private static DownloadManager mInstance;
    private final Context context;
    
    private DownloadManager(Context context) {}
    //初始化組件
    public static void init(Context context) {}
    //開啟下載
    public static void add(DownloadEntry entry) {}  
    //暫停下載
    public static void pause(DownloadEntry entry) {}    
    //暫停所有任務
    public static void pauseAll() {}
    //恢復下載
    public static void resume(DownloadEntry entry) {}   
    //恢復所有任務
    public static void recoverAll() {}
}

1.4、監(jiān)聽下載進度

需要監(jiān)聽下載進度可通過注冊DownloadWatcher來監(jiān)聽下載信息的變化

private DownloadWatcher watcher = new DownloadWatcher() {
    @Override
    protected void onDataChanged(DownloadEntiry entry) {
	    //這里監(jiān)聽下載的實時信息
        mDownloadInfoLabel.setText(entry.toString());
        Log.e("MainActivity", entry.toString());
    }
};

@Override
protected void onResume() {
    super.onResume();
    //注冊觀察者
    DownloadManager.addObserver(watcher);
}

@Override
protected void onPause() {
    super.onPause();
    //移除觀察者
    DownloadManager.removeObserver(watcher);
}

其中第3DownloadEntiry entry 存儲了下載相關(guān)信息

public class DownloadEntry implements Serializable {
    public String id;//下載的唯一標識
    public String url;//下載文件的url地址
    public boolean isSupportRange;//是否支持斷點續(xù)傳
    public long contentLength;//文件長度
    public long currentLength;//已下載文件長度
    public State state;//任務狀態(tài)
    public HashMap<Integer, Long> ranges;//存儲每個線程下載開始區(qū)塊
    public int speed;//下載速度 單位s
}

其中state有如下幾個值

public enum State {
    IDLE,//空閑
    CONNECT,//連接中(用戶預取文件信息)
    ING,//下載中
    PAUSED,//已暫停
    CANCELLED,//已取消
    ERROR,//錯誤
    DONE,//完成
    WAIT//等待
}

1.5、下載相關(guān)的操作

添加一個下載

通過DownloadEntry構(gòu)建下載實體

public void addDownload(String id,String url){
    //id為任務的一個唯一標識,url為文件地址
    DownloadEntry entry = DownloadEntry.obtain(id,url)
    //添加一個下載任務
    DownloadManager.add(entry)    
}

暫停下載

可通過下載任務id 然后調(diào)用DownloadManager.findById(id) 函數(shù)獲取DownloadEntry

public void pauseDownload(DownloadEntry entry){
    //添加一個下載任務
    DownloadManager.pause(entry)    
}

恢復下載

public void resumeDownload(DownloadEntry entry){
    //添加一個下載任務
    DownloadManager.resume(entry)    
}

暫停所有下載任務

public void pauseAll(DownloadEntry entry){
    //添加一個下載任務
    DownloadManager.resume(entry)    
}

恢復所有下載任務

public void recoverAll(DownloadEntry entry){
    //添加一個下載任務
    DownloadManager.recoverAll(entry)    
}

1.6、應用市場apk下載的一個場景

ApkEntry實體數(shù)據(jù)用來描述apk的基本信息

public class ApkEntry {
    public String id;//包id
    public String cover;//apk 圖標
    public String name;//apk 名稱
    public String url;//apk 下載地址
    public long length;//apk 大小

    public String id() {
        if (TextUtils.isEmpty(id)) {
            //如果服務端沒有返回唯一標記則用url的md5值作為下載唯一標識
            id = FileUtilities.getMd5FileName(url);
        }
        return id;
    }
}

這是我要下載這個apk就可以這么做

public void downloadApk(ApkEntry apkEntry){
    //1、先check當前apk是否在下載
    DownloadEntry entry = DownloadManager.findById(apkEntry.id())
    if(entry==null || entry.state==State.PAUSED || entry.state==State.ERROR || entry.state==State.CANCELLED){
        //這四種情況:沒有下載任務 || 任務是暫停 || 下載失敗 || 任務已被取消
        DownloadManager.add(entry)
    }
}

暫停apk下載

public void pauseDownloadApk(ApkEntry apkEntry){
    //1、先check當前apk是否在下載任務中
    DownloadEntry entry = DownloadManager.findById(apkEntry.id())
    if(entry!=null){
        DownloadManager.pause(entry)
    }
}

總結(jié)

到此這篇關(guān)于Android實現(xiàn)多線程斷點下載的文章就介紹到這了,更多相關(guān)Android多線程斷點下載內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Android橫豎屏切換及其對應布局加載問題詳解

    Android橫豎屏切換及其對應布局加載問題詳解

    這篇文章主要為大家詳細介紹了Android橫豎屏切換及其對應布局加載問題,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-04-04
  • Android 8.0系統(tǒng)中通知欄的適配詳解

    Android 8.0系統(tǒng)中通知欄的適配詳解

    本片文章給大家通過實例講解分析了Android 8.0系統(tǒng)中通知欄的相關(guān)知識點,對此有需要的朋友可以參考學習下。
    2018-04-04
  • 基于Android實現(xiàn)3D翻頁效果

    基于Android實現(xiàn)3D翻頁效果

    這篇文章主要為大家詳細介紹了基于Android實現(xiàn)3D翻頁效果的具體代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-06-06
  • Android4.0開發(fā)之Keyguard解鎖屏機制詳解

    Android4.0開發(fā)之Keyguard解鎖屏機制詳解

    這篇文章主要介紹了Android4.0開發(fā)之Keyguard解鎖屏機制,結(jié)合實例形式詳細分析了Android開發(fā)中Keyguard解鎖屏模塊的原理、使用方法與相關(guān)操作注意事項,需要的朋友可以參考下
    2017-12-12
  • Android巧用DecorView實現(xiàn)對話框功能

    Android巧用DecorView實現(xiàn)對話框功能

    本篇文章主要介紹了Android巧用DecorView實現(xiàn)對話框功能,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-04-04
  • Android Studio多工程引用同一個library項目配置的解決方法

    Android Studio多工程引用同一個library項目配置的解決方法

    大家在使用android studio的時候,會遇到多個項目引用相同的library這篇文章主要介紹了Android Studio多工程引用同一個library項目配置方法,需要的朋友可以參考下
    2018-03-03
  • AlertDialog點擊按鈕不消失的實現(xiàn)方法

    AlertDialog點擊按鈕不消失的實現(xiàn)方法

    我有一個文本輸入對話框,當我點擊對話框上的“是”按鈕,它會驗證輸入,然后關(guān)閉對話框,但是,如果輸入錯誤,我想停留在同一個對話框中。怎么實現(xiàn)此功能呢?下面通過本文給大家分享下
    2017-01-01
  • 一文帶你了解Android?Flutter中Transform的使用

    一文帶你了解Android?Flutter中Transform的使用

    flutter的強大之處在于,可以對所有的widget進行Transform,因此可以做出非??犰诺男Ч?。本文就來大家了解一下Transform的具體使用,感興趣的可以了解一下
    2023-01-01
  • Android SharePreferences與數(shù)據(jù)庫SQLite存儲實現(xiàn)方法介紹

    Android SharePreferences與數(shù)據(jù)庫SQLite存儲實現(xiàn)方法介紹

    這篇文章主要介紹了Android SharePreferences與數(shù)據(jù)庫SQLite用于存儲的具體實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習吧
    2022-09-09
  • Android獲取監(jiān)聽SD卡狀態(tài)

    Android獲取監(jiān)聽SD卡狀態(tài)

    本篇文章主要介紹了Android獲取監(jiān)聽SD卡狀態(tài),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-03-03

最新評論