android代码显示和清除缓存

Android中处理缓存 android代码显示和清除缓存
文章图片

今天早上如往常一样打开手机开始浏览新闻图片和视频,突然手机提示手机的缓存文件过大需要清理,出于职业敏感,于是起床,刷牙,洗脸打算写一篇自动利用代码清理缓存的文章。
首先,打开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"; } }

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

    推荐阅读