android缓存数据自动删除,Android获取应用缓存数据并清除数据

如图清理缓存的功能是App中经常需要做的一个功能

d186628f5020

image.png

缓存主要计算的是

1.安卓内置数据库中的数据对应 data/data/应用包名/databases/数据库名称 路径下的数据内容

2.图片加载框架中图片的磁盘缓存

3.SharePrefenerce中一些简单的基本类型的数据存储

暂时只知道这些。

缓存计算主要就是计算对应缓存文件的大小code如下:

fun getFolderSize(file: File): Long {

var size: Long = 0

try {

val fileList = file.listFiles()

for (aFileList in fileList) {

if (aFileList.isDirectory) size += getFolderSize(aFileList) else {

size += aFileList.length()

}

}

} catch (e: Exception) {

e.printStackTrace()

}

return size

}

传入要计算的File得到对应的字节一般需要展示的单位是M,方法转换如下:

fun getPrintSize(s: Long): String {

var size = s.toFloat()

if (size < 1024) {

return save2float(size) + "B" + ")"

} else {

size /= 1024

}

if (size < 1024) {

return save2float(size) + "K" + ")"

} else {

size /= 1024

}

if (size < 1024) {

return save2float(size) + "M" + ")"

} else {

size /= 1024

}

return save2float(size) + "G" + ")"

}

private fun save2float(n: Float): String {

return "(" + (Math.round(n * 100).toFloat() / 100).toString()

}

以上方法可以获取到缓存大小。

清理缓存无非就是删除对应缓存文件方法如下:

private fun clearCache(): Boolean {

doAsync {

val glideCacheDir = Glide.getPhotoCacheDir(this@MainActivity) as File

var totalSize: Long = getFolderSize(glideCacheDir)

totalSize += getFolderSize(App.instance.cacheDir)

uiThread {

if (totalSize == 0L) {

item.title = "清理完成"

return@uiThread

}

item.title = "正在清理${getPrintSize(totalSize)}..."

doAsync {

deleteFolderFile(object : FileUtil.Companion.DeleteListener {

override fun onDone() {

uiThread {

item.title = "清理完成"

}

}

override fun onDelete(size: Long) {

uiThread {

totalSize -= size

}

}

}, glideCacheDir, App.instance.cacheDir)

}

}

}

return true

}

对应FileUtil中方法:

//监听数据清除的过程及时修改缓存大小的监听

interface DeleteListener {

fun onDelete(size: Long)

fun onDone()

}

fun deleteFolderFile(deleteListener: DeleteListener,vararg dirs: File ) {

for ( dir in dirs){

try {

val fileList = dir.listFiles()

for (aFileList in fileList!!) {

if (aFileList.isDirectory) {

deleteFolderFile(deleteListener, aFileList)

} else {

deleteListener.onDelete(deleteFileS(aFileList))

}

}

} catch (e: Exception) {

e.printStackTrace()

}

}

deleteListener.onDone()

}

private fun deleteFileS(file: File): Long {

val size = file.length()

file.delete()

return size

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值