Android开发获取缓存,删除缓存
app设置中往往有清理缓存的功能。会显示当前缓存时多少,然后可以点击清理缓存
直接上代码:
object CacheHelper {
/**
* 获取缓存大小
* @param context
* @return
* @throws Exception
*/
@JvmStatic
fun getTotalCacheSize(context: Context): String {
val cacheSize = getFolderSize(context.cacheDir)
if (Environment.getExternalStorageState() == Environment.MEDIA_MOUNTED) {
// cacheSize += getFolderSize(context.getExternalCacheDir());
}
return getFormatSize(cacheSize.toDouble())
}
/**
* 清除缓存
* @param context
*/
fun clearAllCache(context: Context) {
deleteDir(context.cacheDir)
if (Environment.getExternalStorageState() == Environment.MEDIA_MOUNTED) {
deleteDir(context.externalCacheDir)
}
}
private fun deleteDir(dir: File?): Boolean {
if (dir != null && dir.isDirectory) {
if (dir.list() == null) {
return false
}
val children = dir.list() ?: return false
for (i in children.indices) {
val success = deleteDir(File(dir, children[i]))
if (!success) {
return false
}
}
}
return dir?.delete() ?: false
}
// 获取文件大小
//Context.getExternalFilesDir() --> SDCard/Android/data/你的应用的包名/files/ 目录,一般放一些长时间保存的数据
//Context.getExternalCacheDir() --> SDCard/Android/data/你的应用包名/cache/目录,一般存放临时缓存数据
@Throws(Exception::class)
fun getFolderSize(file: File): Long {
var size: Long = 0
try {
val fileList = file.listFiles()
for (i in fileList.indices) {
// 如果下面还有文件
size += if (fileList[i].isDirectory) {
getFolderSize(fileList[i])
} else {
fileList[i].length()
}
}
} catch (e: Exception) {
e.printStackTrace()
}
return size
}
/**
* 格式化单位
* @param size
* @return
*/
private fun getFormatSize(size: Double): String {
val kiloByte = size / 1024
if (kiloByte < 1) {
// return size + "Byte";
return "0K"
}
val megaByte = kiloByte / 1024
if (megaByte < 1) {
val result1 = BigDecimal(java.lang.Double.toString(kiloByte))
return result1.setScale(2, BigDecimal.ROUND_HALF_UP)
.toPlainString() + "K"
}
val gigaByte = megaByte / 1024
if (gigaByte < 1) {
val result2 = BigDecimal(java.lang.Double.toString(megaByte))
return result2.setScale(2, BigDecimal.ROUND_HALF_UP)
.toPlainString() + "M"
}
val teraBytes = gigaByte / 1024
if (teraBytes < 1) {
val result3 = BigDecimal(java.lang.Double.toString(gigaByte))
return result3.setScale(2, BigDecimal.ROUND_HALF_UP)
.toPlainString() + "GB"
}
val result4 = BigDecimal(teraBytes)
return result4.setScale(2, BigDecimal.ROUND_HALF_UP).toPlainString() + "TB"
}
}
有Android开发或者鸿蒙开发需求或者问题的可以私信我,我每天都看私信的