Android优雅的实现缓存计算和清除缓存功能

Kotlin使用
CaheUtil.util.getCacheSize(context) //返回小数点后两位最大为MB
JAVA使用
CaheUtil.Companion.getUtil().getCacheSize(activity);
CaheUtil.Companion.getUtil().clearCache(activity);
class CaheUtil {
    companion object{
        val util by lazy(LazyThreadSafetyMode.SYNCHRONIZED){
            CaheUtil()
        }
    }

    /**
     * 获取缓存大小(MB)
     * */
    fun getCacheSize(activity: Activity):String{
        var finalSize: String
        var cacheSize = activity.cacheDir.size()
        if (Environment.getExternalStorageState() == Environment.MEDIA_MOUNTED) {
            cacheSize += activity.externalCacheDir.size()
        }
        finalSize = getFormatSize(cacheSize)
        return finalSize
    }

    /**
     * 清除缓存
     * */
    fun clearCache(activity: Activity){
         activity.cacheDir.clearFile()
        if (Environment.getExternalStorageState() == Environment.MEDIA_MOUNTED) {
           activity.externalCacheDir.clearFile()
        }
    }

    /**
     * 转换格式
     * */
    fun getFormatSize(size:Long):String{
        if (size <= 0) {
            return "0.00 KB"
        }
        var kSize = size / 1024f
        if (kSize < 1) {
            var result1 = BigDecimal(kSize.toString())
            return result1.setScale(2, BigDecimal.ROUND_HALF_UP)
                    .toPlainString() + "KB"
        }

        var mSize = kSize / 1024
        var result1 = BigDecimal(mSize.toString())
        return result1.setScale(2, BigDecimal.ROUND_HALF_UP)
                .toPlainString() + "MB"

    }


    /**
     * 获取文件或者文件夹大小
     * */
    fun File.size():Long{
        var size = 0L
        try {
            if (isFile) {
                size += length()
            }
            if (isDirectory) {
                listFiles().forEach {
                    size += it.size()
                }
            }
        } catch (e: Exception) {
            e.printStackTrace()
        }
        return size
    }

    /**
     * 删除文件夹或文件
     * */
    fun File.clearFile() {
        if (isFile) delete()
        if (isDirectory) listFiles().forEach { it.clearFile() }
    }
}

 

你可能感兴趣的:(缓存,缓存计算,缓存清除)