Skip to content

Commit fc5cc85

Browse files
committed
优化下载代码
1 parent 081e907 commit fc5cc85

File tree

9 files changed

+89
-39
lines changed

9 files changed

+89
-39
lines changed

CHANGE_lOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,8 @@
11
# CHANGE LOG
2+
### v0.4.3(2022.4.20)
3+
4+
+ 优化下载代码
5+
26
### v0.4.2(2022.4.19)
37

48
+ 文件下载增加协程方式

README.md

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -558,12 +558,20 @@ class ResponseBodyConverter :
558558
| interceptors | Interceptor || Interceptor | http拦截器 |
559559
| debugInterceptors| Interceptor || Interceptor | debug模式下的http拦截器,只有NetManager.setDebug(true),才会生效 |
560560

561-
### 8. 文件下载器([DownloadManager](./mvvm/src/main/java/com/catchpig/mvvm/manager/DownloadManager.kt)))
561+
### 8. 文件下载器([DownloadManager](./mvvm/src/main/java/com/catchpig/mvvm/manager/DownloadManager.kt))-支持协程方式和RxJava两种方式的下载([RxJavaDownloadManager](./mvvm/src/main/java/com/catchpig/mvvm/listener/RxJavaDownloadManager.kt)[CoroutinesDownloadManager](./mvvm/src/main/java/com/catchpig/mvvm/listener/CoroutinesDownloadManager.kt))
562+
563+
+ 设置下载路径
564+
565+
```kotlin
566+
DownloadManager.setDownloadPath("${ContextManager.context.externalCacheDir!!.absolutePath}/kmvvmDownload")
567+
```
568+
569+
562570

563571
+ 单文件下载方法download([DownloadCallback](./mvvm/src/main/java/com/catchpig/mvvm/listener/DownloadCallback.kt))
564572

565573
```kotlin
566-
DownloadManager.download(downloadUrl, {
574+
RxJavaDownloadManager.download(downloadUrl, {
567575
//下载完成回调
568576
}, { downloadProgress ->
569577
//下载进度回调

app/src/main/java/com/catchpig/kmvvm/apk/viewmodel/InstallApkViewModel.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ import androidx.lifecycle.viewModelScope
55
import com.catchpig.mvvm.base.viewmodel.BaseViewModel
66
import com.catchpig.mvvm.entity.DownloadProgress
77
import com.catchpig.mvvm.network.manager.CoroutinesDownloadManager
8-
import com.catchpig.mvvm.network.manager.RxJavaDownloadManager
98
import kotlinx.coroutines.Dispatchers
109
import kotlinx.coroutines.launch
1110

@@ -36,6 +35,7 @@ class InstallApkViewModel : BaseViewModel() {
3635
// }, { downloadProgress ->
3736
// progressLiveData1.value = downloadProgress
3837
// })
38+
CoroutinesDownloadManager.clearFiles()
3939
CoroutinesDownloadManager.download(downloadUrlpng, {
4040

4141
}, { downloadProgress ->

app/src/main/java/com/catchpig/kmvvm/app/KotlinMvpApp.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@ package com.catchpig.kmvvm.app
33
import android.app.Application
44
import com.catchpig.kmvvm.BuildConfig
55
import com.catchpig.kmvvm.R
6+
import com.catchpig.mvvm.manager.ContextManager
7+
import com.catchpig.mvvm.network.manager.DownloadManager
68
import com.catchpig.mvvm.network.manager.NetManager
79
import com.scwang.smart.refresh.footer.ClassicsFooter
810
import com.scwang.smart.refresh.header.MaterialHeader
@@ -29,5 +31,6 @@ class KotlinMvpApp : Application() {
2931
override fun onCreate() {
3032
super.onCreate()
3133
NetManager.setDebug(BuildConfig.DEBUG)
34+
DownloadManager.setDownloadPath("${ContextManager.context.externalCacheDir!!.absolutePath}/kmvvmDownload")
3235
}
3336
}

mvvm/src/main/java/com/catchpig/mvvm/network/manager/CoroutinesDownloadManager.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ import java.net.URL
2121
* @author catchpig
2222
* @date 2020/11/20 10:25
2323
*/
24-
object CoroutinesDownloadManager : BaseDownloadManager() {
24+
object CoroutinesDownloadManager : DownloadManager() {
2525
private var downloadServiceMap: MutableMap<String, CoroutinesDownloadService> = ArrayMap()
2626

2727
private fun getDowLoadService(baseUrl: String): CoroutinesDownloadService {

mvvm/src/main/java/com/catchpig/mvvm/network/manager/BaseDownloadManager.kt renamed to mvvm/src/main/java/com/catchpig/mvvm/network/manager/DownloadManager.kt

Lines changed: 51 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package com.catchpig.mvvm.network.manager
33
import android.os.Environment
44
import com.catchpig.mvvm.manager.ContextManager
55
import com.catchpig.mvvm.network.interceptor.DownloadInterceptor
6+
import com.catchpig.utils.ext.deleteAll
67
import okhttp3.OkHttpClient
78
import okhttp3.ResponseBody
89
import okhttp3.logging.HttpLoggingInterceptor
@@ -12,7 +13,7 @@ import java.io.RandomAccessFile
1213
import java.nio.channels.FileChannel
1314
import java.util.concurrent.TimeUnit
1415

15-
open class BaseDownloadManager {
16+
open class DownloadManager {
1617
companion object {
1718
/**
1819
* 连接超时时间(秒)
@@ -23,40 +24,53 @@ open class BaseDownloadManager {
2324
* 读取数据超时时间(分钟)
2425
*/
2526
private const val READ_TIMEOUT = 10L
26-
}
2727

28+
/**
29+
* 下载路径
30+
*/
31+
private var downloadPath: String? = null
2832

29-
private val logInterceptor by lazy {
30-
val httpLoggingInterceptor = HttpLoggingInterceptor()
31-
httpLoggingInterceptor.level = HttpLoggingInterceptor.Level.BODY
32-
httpLoggingInterceptor
33-
}
33+
private val logInterceptor by lazy {
34+
val httpLoggingInterceptor = HttpLoggingInterceptor()
35+
httpLoggingInterceptor.level = HttpLoggingInterceptor.Level.BODY
36+
httpLoggingInterceptor
37+
}
3438

35-
protected val downloadInterceptor by lazy {
36-
DownloadInterceptor()
37-
}
39+
val downloadInterceptor by lazy {
40+
DownloadInterceptor()
41+
}
42+
43+
private var okHttpClient: OkHttpClient? = null
3844

39-
private var okHttpClient: OkHttpClient? = null
45+
fun getOkHttpClient(): OkHttpClient {
46+
if (okHttpClient == null) {
47+
okHttpClient = OkHttpClient
48+
.Builder()
49+
/**
50+
* 连接超时时间5秒
51+
*/
52+
.connectTimeout(CONNECT_TIMEOUT, TimeUnit.SECONDS)
53+
/**
54+
* 读取数据超时时间10分钟
55+
*/
56+
.readTimeout(READ_TIMEOUT, TimeUnit.MINUTES)
57+
.addInterceptor(logInterceptor)
58+
.addInterceptor(downloadInterceptor)
59+
.build()
60+
}
61+
return okHttpClient!!
62+
}
4063

41-
protected fun getOkHttpClient(): OkHttpClient {
42-
if (okHttpClient == null) {
43-
okHttpClient = OkHttpClient
44-
.Builder()
45-
/**
46-
* 连接超时时间5秒
47-
*/
48-
.connectTimeout(CONNECT_TIMEOUT, TimeUnit.SECONDS)
49-
/**
50-
* 读取数据超时时间10分钟
51-
*/
52-
.readTimeout(READ_TIMEOUT, TimeUnit.MINUTES)
53-
.addInterceptor(logInterceptor)
54-
.addInterceptor(downloadInterceptor)
55-
.build()
64+
/**
65+
* 设置下载路径
66+
* @param path String
67+
*/
68+
fun setDownloadPath(path: String) {
69+
downloadPath = path
5670
}
57-
return okHttpClient!!
5871
}
5972

73+
6074
/**
6175
* 生成文件的地址
6276
* @param downloadUrl String
@@ -65,17 +79,25 @@ open class BaseDownloadManager {
6579
protected fun localFileName(downloadUrl: String): String {
6680
val fileName = downloadUrl.replace("/", "").replace("\\", "")
6781
var cashDir = getDownloadFilePath()
68-
return "$cashDir/download/$fileName"
82+
return "$cashDir/$fileName"
6983
}
7084

7185
private fun getDownloadFilePath(): String {
72-
return if (Environment.MEDIA_MOUNTED == Environment.getExternalStorageState()) {
86+
downloadPath?.let {
87+
return it
88+
}
89+
val path = if (Environment.MEDIA_MOUNTED == Environment.getExternalStorageState()) {
7390
//有SD卡,拿到SD卡的/storage/sdcard0/Android/data/包名/cash目录
7491
ContextManager.context.externalCacheDir!!.absolutePath
7592
} else {
7693
//没有SD卡的,拿到/data/data/包名/cash目录
7794
ContextManager.context.cacheDir.absolutePath
7895
}
96+
return "$path/download"
97+
}
98+
99+
fun clearFiles() {
100+
File(getDownloadFilePath()).deleteAll()
79101
}
80102

81103
/**

mvvm/src/main/java/com/catchpig/mvvm/network/manager/RxJavaDownloadManager.kt

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,25 +9,21 @@ import com.catchpig.mvvm.listener.MultiDownloadCallback
99
import com.catchpig.mvvm.network.api.RxJavaDownloadService
1010
import com.catchpig.mvvm.network.download.DownloadSubscriber
1111
import com.catchpig.mvvm.network.download.MultiDownloadSubscriber
12-
import com.catchpig.mvvm.network.interceptor.DownloadInterceptor
1312
import io.reactivex.rxjava3.core.Flowable
1413
import io.reactivex.rxjava3.disposables.Disposable
1514
import io.reactivex.rxjava3.schedulers.Schedulers
16-
import okhttp3.OkHttpClient
17-
import okhttp3.logging.HttpLoggingInterceptor
1815
import retrofit2.Retrofit
1916
import retrofit2.adapter.rxjava3.RxJava3CallAdapterFactory
2017
import retrofit2.converter.gson.GsonConverterFactory
2118
import java.io.File
2219
import java.net.URL
23-
import java.util.concurrent.TimeUnit
2420

2521
/**
2622
* 描述:下载工具类
2723
* @author catchpig
2824
* @date 2020/11/20 10:25
2925
*/
30-
object RxJavaDownloadManager : BaseDownloadManager() {
26+
object RxJavaDownloadManager : DownloadManager() {
3127

3228
private var downloadServiceMap: MutableMap<String, RxJavaDownloadService> = ArrayMap()
3329

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package com.catchpig.utils.ext
2+
3+
import java.io.File
4+
5+
fun File.deleteAll() {
6+
deleteFile(this)
7+
}
8+
9+
private fun deleteFile(file: File) {
10+
if (file.isFile) {
11+
file.delete()
12+
} else if (file.isDirectory) {
13+
file.listFiles().forEach {
14+
deleteFile(it)
15+
}
16+
}
17+
}

version.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ ext {
2323
auto_service_version = '1.0.1'
2424
kotlinpoet_version = '1.11.0'
2525
rxpermissions_version = "0.12"
26-
recycleview_version = "1.3.1"
26+
recycleview_version = "1.2.1"
2727
UIViewPager_version = "0.1.8"
2828
okhttpprofiler_version = "1.0.8"
2929
coroutines_version = "1.6.1"

0 commit comments

Comments
 (0)