android代码显示和清除缓存

Android中处理缓存

android代码显示和清除缓存_第1张图片

今天早上如往常一样打开手机开始浏览新闻图片和视频,突然手机提示手机的缓存文件过大需要清理,出于职业敏感,于是起床,刷牙,洗脸打算写一篇自动利用代码清理缓存的文章。
首先,打开AndroidStudio准备先写一个测试一下是否可以,很显然没有毛病,下面我把刚写的代码贴出来,里面基本没有逻辑,挺简单的。


/**
 * Created by luweicheng on 2016/12/13.
 */

public class CacheDataManager {
    /**
     * 计算文件大小(Long型)
     * @param dir
     * @return
     */
    private static long getFileSize(File dir){
        long size = 0;
        File[] fileList = dir.listFiles();
        for (int i = 0; i < fileList.length; i++) {
            if(fileList[i].isDirectory()){
                size=+getFileSize(fileList[i]);//迭代计算文件大小
            }else{
                size = fileList[i].length();
            }

        }

      return size;
    }

    /**
     * 删除文件或者文件夹
     * @param dir
     */
    private static void deleteFile(File dir){
        if(dir!=null && dir.isDirectory()){
            File[] files = dir.listFiles();
            for (int i = 0; i < files.length; i++) {
                deleteFile(files[i]);  //迭代删除
            }
        }else if(dir != null && dir.isFile()){
            dir.delete();
        }
    }

    /**
     * 清除所有缓存
     * @param context
     */
    public static void ClearAllCache(Context context){
        File dir1 = context.getCacheDir();
        deleteFile(dir1);
        if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){//判断sd卡是否挂载
           File dir2 = context.getExternalCacheDir();//获取sd卡缓存
            deleteFile(dir2);
        }
    }

    /**
     *
     * 获取所用缓存大下
     * @param context
     * @return
     */
    public static long getAllCacheSize(Context context){
        long size = 0;
        File dir1 = context.getCacheDir();//获取内存缓存
        size = getFileSize(dir1);
        if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
            File dir2 = context.getExternalCacheDir();
            size =+ getFileSize(dir2);
        }
        return size;
    }

    /**
     * 格式化单位
     *
     * @param size
     * @return
     */
    public static String getFormatSize(double size) {
        double kiloByte = size / 1024;
        if (kiloByte < 1) {
            // return size + "Byte";
            return "0K";
        }

        double megaByte = kiloByte / 1024;
        if (megaByte < 1) {
            BigDecimal result1 = new BigDecimal(Double.toString(kiloByte));
            return result1.setScale(2, BigDecimal.ROUND_HALF_UP).toPlainString() + "KB";
        }

        double gigaByte = megaByte / 1024;
        if (gigaByte < 1) {
            BigDecimal result2 = new BigDecimal(Double.toString(megaByte));
            return result2.setScale(2, BigDecimal.ROUND_HALF_UP).toPlainString() + "MB";
        }

        double teraBytes = gigaByte / 1024;
        if (teraBytes < 1) {
            BigDecimal result3 = new BigDecimal(Double.toString(gigaByte));
            return result3.setScale(2, BigDecimal.ROUND_HALF_UP).toPlainString() + "GB";
        }
        BigDecimal result4 = new BigDecimal(teraBytes);
        return result4.setScale(2, BigDecimal.ROUND_HALF_UP).toPlainString() + "TB";
    }
}

是不是挺简单的,只不过以前很少去了解BigDecimal这个类,因为开始的时候,我直接没有去格式化缓存的大小直接打印出来的时候真是触目惊心,这个数字也太大了吧,而且小数点后面也有很多位,因为谷歌前两天将开发者网站能够不用爬梯子就能查看文档说明,对于一个四级没过的渣渣而言,文档只能读个大概,基本了解到BigDecimal是一个处理专门处理数字而且特别精确,经常用于商业汇率计算等。下面这段是BigDecimal的解释:
Java在java.math包中提供的API类BigDecimal,用来对超过16位有效位的数进行精确的运算。双精度浮点型变量double可以处理16位有效数。在实际应用中,需要对更大或者更小的数进行运算和处理。float和double只能用来做科学计算或者是工程计算,在商业计算中要用java.math.BigDecimal。BigDecimal所创建的是对象,我们不能使用传统的+、-、*、/等算术运算符直接对其对象进行数学运算,而必须调用其相对应的方法。方法中的参数也必须是BigDecimal的对象。构造器是类的特殊方法,专门用来创建对象,特别是带有参数的对象。

你可能感兴趣的:(android)