Android开发中缓存Clean的工具类
2016-12-07 13:39
246 查看
在app应用开发中,我们经常性的遇到关于缓存的问题,那么我们可以在某些特定的操作多过程中,对缓存进行清理,这样就不会导致因为缓存二导致的问题。那么问题来了,在app中的缓存方式有几种?这些缓存的文件目录是什么路径?用什么方法删除?那么我们就在这些问题的指引下完成这个工具类。
1、Android缓存分为:页面缓存和数据缓存。 (参考来源:http://www.rm5u.com/android/android-webview-cache.html)
页面缓存:加载一个网页时的html、JS、CSS等页面或者资源数据,这些缓存资源是由于浏览器 的行为而产生,开发者只能通过配置HTTP响应头影响浏览器的行为才能间接地影响到这些缓存数据。 而缓存的索引放在:/data/data/<包名>/databases 对应的文件放在:/data/data/package_name/cache/webviewCacheChromunm下 数据缓存:分为AppCache和DOM Storage两种 我们开发者可以自行控制的就是这些缓存资源, AppCache:我们能够有选择的缓冲web浏览器中所有的东西,从页面、图片到脚本、css等等。 尤其在涉及到应用于网站的多个页面上的CSS和JavaScript文件的时候非常有用。其大小目前通常是5M。 在Android上需要手动开启(setAppCacheEnabled),并设置路径(setAppCachePath)和容量 (setAppCacheMaxSize),而Android中使用ApplicationCache.db来保存AppCache数据! DOM Storage:存储一些简单的用key/value对即可解决的数据,根据作用范围的不同,有Session Storage和Local Storage两种,分别用于会话级别的存储(页面关闭即消失)和本地化存储(除非主动 删除,否则数据永远不会过期)在Android中可以手动开启DOM Storage(setDomStorageEnabled), 设置存储路径(setDatabasePath)Android中Webkit会为DOMStorage产生两个文件(my_path/localstorage/http_blog.csdn.net_0.localstorage和my_path/Databases.db)
好复杂!好难懂!:-( 其实我们重点看的其实就是缓存文件的存储路径:
/data/data/<包名>/databases 对应的文件放在:/data/data/package_name/cache/webviewCacheChromunm下
Android中Webkit会为DOMStorage产生两个文件(my_path/localstorage/http_blog.csdn.net_0.localstorage和my_path/Databases.db)
2、那么在实际的开发中的解决方法
获取长时间保存的文件,Context.getExternalFilesDir(); 存储位置,SDCard/Android/data/你的应用的包名/files/ 获取临时缓存, Context.getExternalCacheDir(); 存储位置,SDCard/Android/data/你的应用包名/cache/
3、代码:(参考来源:http://blog.csdn.net/f1186485056/article/details/52808101)
package com.caption.moblie.util; import java.io.File; import java.math.BigDecimal; import android.content.Context; import android.os.Environment; /** * Title: 清理缓存工具类 * Description: XPPMobileTerminal * @date:2016年12月7日 上午10:47:11 */ public class CleanMessageUtil { /** * MethodsTitle: 删除缓存 * @date:2016年12月7日 上午10:56:18 * @version 1.0 * @param context */ public static void clearAllCache(Context context) { deleteDir(context.getCacheDir()); if (Environment.getExternalStorageState().equals( Environment.MEDIA_MOUNTED)) { deleteDir(context.getExternalCacheDir()); } } /** * MethodsTitle: 获取删除文件位置 * @date:2016年12月7日 上午10:56:36 * @version 1.0 * @param dir * @return */ private static boolean deleteDir(File dir) { if (dir != null && dir.isDirectory()) { String[] children = dir.list(); int size = 0; if (children != null) { size = children.length; for (int i = 0; i < size; i++) { boolean success = deleteDir(new File(dir, children[i])); if (!success) { return false; } } } } if (dir == null) { return true; } else { return dir.delete(); } } /** * MethodsTitle: 获取当前缓存 * @date:2016年12月7日 上午10:53:01 * @version 1.0 * @param context * @return * @throws Exception */ public static String getTotalCacheSize(Context context) throws Exception { long cacheSize = getFolderSize(context.getCacheDir()); if (Environment.getExternalStorageState().equals( Environment.MEDIA_MOUNTED)) { cacheSize += getFolderSize(context.getExternalCacheDir()); } return getFormatSize(cacheSize); } /** * MethodsTitle: 获取文件 * 步骤: * Context.getExternalFilesDir() --> SDCard/Android/data/你的应用的包名/files/ * 目录,一般放一些长时间保存的数据 * Context.getExternalCacheDir() --> SDCard/Android/data/你的应用包名/cache/目录,一般存放临时缓存数据 * @date:2016年12月7日 上午10:54:37 * @version 1.0 * @param file * @return * @throws Exception */ public static long getFolderSize(File file) throws Exception { long size = 0; try { File[] fileList = file.listFiles(); int size2 = 0; if (fileList != null) { size2 = fileList.length; for (int i = 0; i < size2; i++) { // 如果下面还有文件 if (fileList[i].isDirectory()) { size = size + getFolderSize(fileList[i]); } else { size = size + fileList[i].length(); } } } } catch (Exception e) { e.printStackTrace(); } return size; } /** * MethodsTitle: 格式化单位并计算缓存的大小 * @date:2016年12月7日 上午10:53:24 * @version 1.0 * @param size * @return */ public static String getFormatSize(double size) { double kiloByte = size / 1024; if (kiloByte < 1) { 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"; } }
4、最后在合适为位置调用即可:-)
CleanMessageUtil.clearAllCache(getApplicationContext());
相关文章推荐
- Android开发系统工具类SysUtils:获取App版本号、SD卡目录、缓存目录、是否后台运行、前台可见
- Android开发中常用计算缓存数据和清除缓存数据工具类
- Android 开发中的网络下载策略 与 文件缓存策略
- [转]浅谈 Android 开发中的网络下载策略 与 文件缓存策略
- Android WIFI连接开发 WIFI工具类
- android 缓存Bitmap - 开发文档翻译
- Android应用开发之(利用好图片缓存)
- android开发--ListView+Json+异步网络图片加载+滚动翻页的例子(图片能缓存,图片不错乱)
- Android 应用开发 之使用LruCache和DiskLruCache来在内存和SD卡中缓存图片
- 产品设计:Android应用-开发技术【数据缓存】
- 总结的一些android公共库,包含公共的View、缓存以及一些工具类
- Android 开发中的网络下载策略 与 文件缓存策略
- Android开发实现HttpClient工具类
- Android开发之清除程序缓存
- Android开发layout-sw600dp, px与dip,sp与dip等的转换工具类
- Android应用开发之(利用好图片缓存)
- Android腾讯微薄客户端开发七:图片加圆角以及时间处理工具类
- Android腾讯微薄客户端开发七:图片加圆角以及时间处理工具类
- Android应用开发之(利用好图片缓存)
- Android开发之多媒体文件获取工具类实例【音频,视频,图片等】