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

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)文章

  • Android橫豎屏切換及其對(duì)應(yīng)布局加載問題詳解

    Android橫豎屏切換及其對(duì)應(yīng)布局加載問題詳解

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

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

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

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

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

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

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

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

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

    Android Studio多工程引用同一個(gè)library項(xiàng)目配置的解決方法

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

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

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

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

    flutter的強(qiáng)大之處在于,可以對(duì)所有的widget進(jìn)行Transform,因此可以做出非常酷炫的效果。本文就來大家了解一下Transform的具體使用,感興趣的可以了解一下
    2023-01-01
  • Android SharePreferences與數(shù)據(jù)庫SQLite存儲(chǔ)實(shí)現(xiàn)方法介紹

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

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

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

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

最新評(píng)論