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() }
    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章