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)//數組列表轉換串行下載