基於OKhttp下載工具YTDownloader

YTDownloader

最近對網絡下載這一塊比較感興趣,所以專門整理和寫了一個簡易的下載庫–YTDownload

github地址:https://github.com/yetaoii/YTDownload

特性

  • 基於Retrofit和Okhttp3來請求網絡
  • 基於RxJava,支持鏈式調用
  • 支持RxJava的LifeCycle綁定生命週期控制
  • 支持斷點續傳,默認開啓
  • 支持串行、和並行批量下載
  • 支持下載優先級,默認爲10
  • 支持進度回調
  • 自動校驗服務器文件是否更改(前提,url對應文件還未下好)

集成

在app的build.gradle中添加依賴

    implementation "com.yetaoii:yt-download:1.0.4"

在AndroidManifest.xml添加權限

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.INTERNET"/>

在Application的onCreate()方法初始化


    override fun onCreate() {
        super.onCreate()
        initYTDownload()
    }

    private fun initYTDownload() {
        YTDownloadManager.instance.init(this)//初始化
        YTDownloadManager.instance.debug = true//調試模式日誌開關
        //    YTDownloadManager.instance.baseUrl=//配置retrofit的baseUrl
        //    YTDownloadManager.instance.defaultSavePath = //默認保存路徑
        //    YTDownloadManager.instance.okHttpClient = //retrofit的okHttpClient
        //    YTDownloadManager.instance.callAdapterFactory = //retrofit的callAdapterFactory//默認rxjava轉換
        //    YTDownloadManager.instance.converterFactory = //retrofit的converterFactory,默認gson轉換
        //        YTDownloadManager.instance.maxDownloadCount = 5//最大同時下載任務數,默認爲5

    }

基本使用

單任務

    private fun singeDownload() {
        var disposable: Disposable? = null
        val task = DownloadTask()
            .addUrl("http://mxd.clientdown.sdo.com/169/Data169.zip","filename.zip")//下載鏈接,使用addUrl是方便後續轉換批量下載支持,文件名參數可省略
            .setPriority(10)//等待隊列中優先級,默認爲10
            .setSavePath(YTDownloadManager.instance.defaultSavePath)//保存路徑,默認值爲Download目錄
            .setIntervalTime(500)//回調間隔,默認1000ms
            .single()//轉換單任務

        task.rxjava()//轉rxjava回調,使用dispose()取消下載,可繼續使用鏈式
            .subscribe(object : Observer<DownloadInfo> {
                override fun onComplete() {

                }

                override fun onSubscribe(d: Disposable) {
                    disposable = d
                }

                override fun onNext(t: DownloadInfo) {
                }

                override fun onError(e: Throwable) {

                }
            })

        //取消下載
        disposable?.dispose()
        //或者
        task.pause()
    }

串行批量下載


    private fun serialDownload(){
        var disposable: Disposable? = null

        val task = DownloadTask()
            .addUrl("http://mxd.clientdown.sdo.com/169/Data169.zip","filename.zip")//下載鏈接,使用addUrl是方便後續轉換批量下載支持,文件名參數可省略
            .addUrl("http://mxd.clientdown.sdo.com/169/Data16901.cab")
            .addUrl("http://mxd.clientdown.sdo.com/169/Data16902.cab")
            .addUrl("http://mxd.clientdown.sdo.com/169/Data16903.cab")
            .addUrl("http://jxsj-client.dl.kingsoft.com/jxsjlv/setup/jxsjls_mini_setup_20190416.exe")
            .addUrl("https://ruanshi1.8686c.com/prod/4.6.17944.0223/Zoom.pkg")
            .setPriority(10)//等待隊列中優先級,默認爲10
            .setSavePath(YTDownloadManager.instance.defaultSavePath)//保存路徑,默認值爲Download目錄
            .setIntervalTime(500)//回調間隔,默認1000ms
            .serial()//轉換串行下載

        task.rxjava()//轉rxjava回調,使用dispose()取消下載,可繼續使用鏈式
            .subscribe(object : Observer<List<DownloadInfo>> {
                override fun onComplete() {

                }

                override fun onSubscribe(d: Disposable) {
                    disposable = d
                }

                override fun onNext(t: List<DownloadInfo>) {
                }

                override fun onError(e: Throwable) {

                }
            })
        //取消下載
        disposable?.dispose()
        //或者
        task.pause()
    }

並行批量下載

    private fun parallelDownload(){
        var disposable: Disposable? = null

        val task = DownloadTask()
            .addUrl("http://mxd.clientdown.sdo.com/169/Data169.zip","filename.zip")//下載鏈接,使用addUrl是方便後續轉換批量下載支持,文件名參數可省略
            .addUrl("http://mxd.clientdown.sdo.com/169/Data16901.cab")
            .addUrl("http://mxd.clientdown.sdo.com/169/Data16902.cab")
            .addUrl("http://mxd.clientdown.sdo.com/169/Data16903.cab")
            .addUrl("http://jxsj-client.dl.kingsoft.com/jxsjlv/setup/jxsjls_mini_setup_20190416.exe")
            .addUrl("https://ruanshi1.8686c.com/prod/4.6.17944.0223/Zoom.pkg")
            .setPriority(10)//等待隊列中優先級,默認爲10
            .setSavePath(YTDownloadManager.instance.defaultSavePath)//保存路徑,默認值爲Download目錄
            .setIntervalTime(500)//回調間隔,默認1000ms
            .parallel()//轉換串行下載

        task.rxjava()//轉rxjava回調,使用dispose()取消下載,可繼續使用鏈式
            .subscribe(object : Observer<List<DownloadInfo>> {
                override fun onComplete() {

                }

                override fun onSubscribe(d: Disposable) {
                    disposable = d
                }

                override fun onNext(t: List<DownloadInfo>) {
                }

                override fun onError(e: Throwable) {

                }
            })
        //取消下載
        disposable?.dispose()
        //或者
        task.pause()
    }

使用YTDownloadManager控制


    YTDownloadManager.instance.cancel(url)//取消單個下載任務
    YTDownloadManager.instance.cancelAll()//取消下載
    YTDownloadManager.instance.parallel(array或List)//數組列表轉換並行下載
    YTDownloadManager.instance.serial(array或List)//數組列表轉換串行下載
    
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章