最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android實(shí)現(xiàn)多線程斷點(diǎn)下載

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

QDownload

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

支持功能如下:

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

先貼個(gè)效果圖

主頁

device-2022-01-28-204742.png

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

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)聽下載進(jìn)度

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

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

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

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

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

public class DownloadEntry implements Serializable {
    public String id;//下載的唯一標(biāo)識(shí)
    public String url;//下載文件的url地址
    public boolean isSupportRange;//是否支持?jǐn)帱c(diǎn)續(xù)傳
    public long contentLength;//文件長度
    public long currentLength;//已下載文件長度
    public State state;//任務(wù)狀態(tài)
    public HashMap<Integer, Long> ranges;//存儲(chǔ)每個(gè)線程下載開始區(qū)塊
    public int speed;//下載速度 單位s
}

其中state有如下幾個(gè)值

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

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

添加一個(gè)下載

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

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

暫停下載

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

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

恢復(fù)下載

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

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

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

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

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

1.6、應(yīng)用市場(chǎng)apk下載的一個(gè)場(chǎng)景

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

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

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

這是我要下載這個(gè)apk就可以這么做

public void downloadApk(ApkEntry apkEntry){
    //1、先check當(dāng)前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當(dāng)前apk是否在下載任務(wù)中
    DownloadEntry entry = DownloadManager.findById(apkEntry.id())
    if(entry!=null){
        DownloadManager.pause(entry)
    }
}

總結(jié)

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

相關(guān)文章

最新評(píng)論

洛浦县| 乳山市| 沐川县| 周口市| 凤庆县| 庆城县| 镇赉县| 嘉兴市| 伊吾县| 扶沟县| 克拉玛依市| 鸡泽县| 南安市| 东明县| 紫云| 年辖:市辖区| 鱼台县| 钦州市| 江永县| 利辛县| 长岛县| 六枝特区| 都昌县| 井陉县| 邵阳县| 莎车县| 新龙县| 昭平县| 巴林右旗| 富平县| 嵊泗县| 武汉市| 达孜县| 上饶市| 石屏县| 龙胜| 临朐县| 昭平县| 宜君县| 灵石县| 乳源|