Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

LetMeOff/SimpleDownload

Repository files navigation

SimpleDownload

kotlin协程+channel实现下载,支持多任务下载、断点续传

添加依赖库

  • 项目build.gradle
allprojects {
 repositories {
 ...
 maven { url 'https://jitpack.io' }
 }
}
  • 添加依赖
dependencies {
 implementation 'com.github.LetMeOff:SimpleDownload:v1.0.0'
}

使用

  1. Application中初始化
SimpleDownload.instance.init(this)
  1. 简单使用
//创建下载任务
val downloadTask = scope.download(downloadUrl)
//状态监听
downloadTask.state().onEach {
 when (it) {
 is State.None -> logD("未开始任务")
 is State.Waiting -> logD("等待中")
 is State.Downloading -> logD("下载中")
 is State.Failed -> logD("下载失败")
 is State.Stopped -> logD("下载已暂停")
 is State.Succeed -> logD("下载成功")
 }
 logD("state : $it")
}.launchIn(scope)
//进度监听
downloadTask.progress().onEach {
 logD("name : $saveName , progress : ${it.percentStr()}")
}.launchIn(scope)
//开始下载任务
downloadTask.start()

创建任务

  • 可以在指定的协程中调用download方法开始任务,任务的生命周期取决于协程的生命周期。如:
val downloadTask = lifecycleScope.download(downloadUrl)

此下载任务会在Activity销毁后结束

  • 默认保存名会从下载链接中获取,默认保存路径为/data/data/包名/files下,可以自定义
val downloadTask = scope.download(downloadUrl, saveName, savePath)

或者自定义参数

//自定义参数
val params = DownloadParam(downloadUrl, saveName, savePath)
val config = DownloadConfig()
config.baseUrl = "http://www.example.com"
val downloadTask = scope.download(params, config)
  • 下载任务默认使用下载链接作为唯一标识,可以自定义
class CustomDownloadParam(url: String, saveName: String, savePath: String) :
 DownloadParam(url, saveName, savePath) {
 override fun tag(): String {
 //定义唯一标示
 return savePath + saveName
 }
}
//使用
val customParams = CustomDownloadParam(downloadUrl, saveName, savePath)
val downloadTask = scope.download(customParams)
  • 在多个页面使用同样的标识创建任务时,将会返回同一个任务,因此可以在不同界面监听同一任务的进度和状态

状态和进度

通过launchIn(scope)指定监听所在的协程,以便于销毁监听

  • 状态监听
//状态监听
downloadTask.state().onEach {
 when (it) {
 is State.None -> logD("未开始任务")
 is State.Waiting -> logD("等待中")
 is State.Downloading -> logD("下载中")
 is State.Failed -> logD("下载失败")
 is State.Stopped -> logD("下载已暂停")
 is State.Succeed -> logD("下载成功")
 }
 logD("state : $it")
}.launchIn(scope)
  • 进度监听
//进度监听
downloadTask.progress().onEach {
 logD("name : $saveName , progress : ${it.percentStr()}")
}.launchIn(scope)

可以自定义监听间隔时间downloadTask.state(500),downloadTask.progress(500),默认200ms

任务操作

  • 开始
downloadTask.start()
  • 停止
downloadTask.stop()
  • 删除(true : 删除文件,false : 不删除,默认false)
downloadTask.remove()

About

Kotlin协程实现的多任务下载

Resources

Stars

Watchers

Forks

Packages

No packages published

Languages

AltStyle によって変換されたページ (->オリジナル) /