Commit 2a388ce7 authored by 周文华's avatar 周文华

【修复】修复垃圾清理开始扫描开始会停止一会儿的体验问题

parent 6d974942
...@@ -79,7 +79,7 @@ class CleanJunkActivity : BaseActivity2() { ...@@ -79,7 +79,7 @@ class CleanJunkActivity : BaseActivity2() {
binding.tvClean.visibility = View.GONE binding.tvClean.visibility = View.GONE
isDisableBack = true isDisableBack = true
lifecycleScope.launch(Dispatchers.IO) { lifecycleScope.launch(Dispatchers.IO) {
val emptyFoldersDeferred = async { FileHelps.findEmptyFolders() } val emptyFoldersDeferred = async { FileHelps.findEmptyFolders(lifecycleScope) }
val filesDeferred = async { MediaHelps.findSpecifiedFiles(this@CleanJunkActivity) } val filesDeferred = async { MediaHelps.findSpecifiedFiles(this@CleanJunkActivity) }
val emptyFolder = emptyFoldersDeferred.await() val emptyFolder = emptyFoldersDeferred.await()
val files = filesDeferred.await() val files = filesDeferred.await()
......
package com.base.scanqrclear.luma package com.base.scanqrclear.luma
import android.os.Environment import android.os.Environment
import androidx.lifecycle.LifecycleCoroutineScope
import com.base.scanqrclear.bean.FileBean import com.base.scanqrclear.bean.FileBean
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.joinAll
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
import java.io.File import java.io.File
object FileHelps { object FileHelps {
...@@ -16,13 +21,41 @@ object FileHelps { ...@@ -16,13 +21,41 @@ object FileHelps {
return list return list
} }
fun findEmptyFolders(): MutableList<FileBean> { suspend fun findEmptyFolders(lifecycleScope: LifecycleCoroutineScope): MutableList<FileBean> {
val externalStorageDir = Environment.getExternalStorageDirectory() val rootDir = Environment.getExternalStorageDirectory()
val filters = arrayOf("/storage/emulated/0/Android/data", "/storage/emulated/0/Android/obb") val filters = arrayOf("/storage/emulated/0/Android/data", "/storage/emulated/0/Android/obb")
val emptyFolders = getAllEmptyFolders(externalStorageDir, filters) val emptyFolders = mutableListOf<File>()
// 使用协程并发遍历文件夹
withContext(Dispatchers.IO) {
findEmptyFolders(lifecycleScope, rootDir, filters, emptyFolders)
}
return emptyFolders.map { FileBean(it.name, it.path, length = 4 * 1024) }.toMutableList() return emptyFolders.map { FileBean(it.name, it.path, length = 4 * 1024) }.toMutableList()
} }
private suspend fun findEmptyFolders(lifecycleScope: LifecycleCoroutineScope, folder: File, filters: Array<String>, emptyFolders: MutableList<File>) {
val files = folder.listFiles() ?: return
if (files.isEmpty() && !filters.contains(folder.path)) {
emptyFolders.add(folder)
return
}
files.filter { it.isDirectory }.map { file ->
lifecycleScope.launch(Dispatchers.IO) {
findEmptyFolders(lifecycleScope, file, filters, emptyFolders)
}
}.joinAll() // 等待所有子任务完成
}
// fun findEmptyFolders(): MutableList<FileBean> {
// val externalStorageDir = Environment.getExternalStorageDirectory()
// val filters = arrayOf("/storage/emulated/0/Android/data", "/storage/emulated/0/Android/obb")
// val emptyFolders = getAllEmptyFolders(externalStorageDir, filters)
// return emptyFolders.map { FileBean(it.name, it.path, length = 4 * 1024) }.toMutableList()
// }
fun findTempFiles(): MutableList<FileBean> { fun findTempFiles(): MutableList<FileBean> {
val rootDir = Environment.getExternalStorageDirectory() val rootDir = Environment.getExternalStorageDirectory()
return findFilesRecursive(rootDir, arrayOf(".temp")) return findFilesRecursive(rootDir, arrayOf(".temp"))
...@@ -64,6 +97,7 @@ object FileHelps { ...@@ -64,6 +97,7 @@ object FileHelps {
return "${Environment.getExternalStorageDirectory()}/$relativePath" return "${Environment.getExternalStorageDirectory()}/$relativePath"
} }
private fun getAllEmptyFolders(root: File, filters: Array<String>): List<File> { private fun getAllEmptyFolders(root: File, filters: Array<String>): List<File> {
return root.walk() return root.walk()
.filter { .filter {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment