欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

QDownload

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

支持功能如下:

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

先貼個效果圖

主頁

device-2022-01-28-204742.png

多任務(wù)多線程斷點下載頁面

device-2022-01-28-204810.png

1、如何使用

1.1、導(dǎo)入依賴

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) {}    
    //暫停所有任務(wù)
    public static void pauseAll() {}
    //恢復(fù)下載
    public static void resume(DownloadEntry entry) {}   
    //恢復(fù)所有任務(wù)
    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;//任務(wù)狀態(tài)
    public HashMap<Integer, Long> ranges;//存儲每個線程下載開始區(qū)塊
    public int speed;//下載速度 單位s
}

其中state有如下幾個值

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

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

添加一個下載

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

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

暫停下載

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

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

恢復(fù)下載

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

暫停所有下載任務(wù)

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

恢復(fù)所有下載任務(wù)

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

1.6、應(yīng)用市場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)) {
            //如果服務(wù)端沒有返回唯一標記則用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){
        //這四種情況:沒有下載任務(wù) || 任務(wù)是暫停 || 下載失敗 || 任務(wù)已被取消
        DownloadManager.add(entry)
    }
}

暫停apk下載

public void pauseDownloadApk(ApkEntry apkEntry){
    //1、先check當前apk是否在下載任務(wù)中
    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)文章

最新評論