Android APP中清除缓存功能详解
来源:互联网 发布:java培训出来找工作 编辑:程序博客网 时间:2024/04/30 11:09
现在很多APP中都有系统设置,这个模块中有一个缓存设置功能,用户可以查看当前APP缓存数据大小并且可以手动清空缓存数据。
缓存数据的统计分2块:内存(这里指的是应用程序包目录所在位置)+外存(外部存储卡)
我这里以开源中国APP数据缓存处理为例为大家讲解下
清除的目录包括:
1./data/data/package_name/files
2./data/data/package_name/cache
3.<sdcard>/Android/data/<package_name>/cache/
4.webview缓存数据
// 计算缓存大小 long fileSize = 0; String cacheSize = "0KB"; File filesDir = getFilesDir();// /data/data/package_name/files File cacheDir = getCacheDir();// /data/data/package_name/cache fileSize += getDirSize(filesDir); fileSize += getDirSize(cacheDir);// 2.2版本才有将应用缓存转移到sd卡的功能 if(isMethodsCompat(android.os.Build.VERSION_CODES.FROYO)){ File externalCacheDir = getExternalCacheDir(this);//"<sdcard>/Android/data/<package_name>/cache/" fileSize += getDirSize(externalCacheDir); } if (fileSize > 0) cacheSize = formatFileSize(fileSize);/** * 获取目录文件大小 * * @param dir * @return */ public static long getDirSize(File dir) { if (dir == null) { return 0; } if (!dir.isDirectory()) { return 0; } long dirSize = 0; File[] files = dir.listFiles(); for (File file : files) { if (file.isFile()) { dirSize += file.length(); } else if (file.isDirectory()) { dirSize += file.length(); dirSize += getDirSize(file); // 递归调用继续统计 } } return dirSize; }/** * 判断当前版本是否兼容目标版本的方法 * @param VersionCode * @return */ public static boolean isMethodsCompat(int VersionCode) { int currentVersion = android.os.Build.VERSION.SDK_INT; return currentVersion >= VersionCode; }@TargetApi(8) public static File getExternalCacheDir(Context context) { // return context.getExternalCacheDir(); API level 8 // e.g. "<sdcard>/Android/data/<package_name>/cache/" return context.getExternalCacheDir(); }/** * 转换文件大小 * * @param fileS * @return B/KB/MB/GB */ public static String formatFileSize(long fileS) { java.text.DecimalFormat df = new java.text.DecimalFormat("#.00"); String fileSizeString = ""; if (fileS < 1024) { fileSizeString = df.format((double) fileS) + "B"; } else if (fileS < 1048576) { fileSizeString = df.format((double) fileS / 1024) + "KB"; } else if (fileS < 1073741824) { fileSizeString = df.format((double) fileS / 1048576) + "MB"; } else { fileSizeString = df.format((double) fileS / 1073741824) + "G"; } return fileSizeString; }/** * 清除app缓存 * * @param activity */ public static void clearAppCache(Activity activity) { final AppContext ac = (AppContext) activity.getApplication(); final Handler handler = new Handler() { public void handleMessage(Message msg) { if (msg.what == 1) { ToastMessage(ac, "缓存清除成功"); } else { ToastMessage(ac, "缓存清除失败"); } } }; new Thread() { public void run() { Message msg = new Message(); try { ac.clearAppCache(); msg.what = 1; } catch (Exception e) { e.printStackTrace(); msg.what = -1; } handler.sendMessage(msg); } }.start(); }在项目中经常会使用到WebView 控件,当加载html 页面时,会在/data/data/package_name目录下生成database与cache 两个文件夹。请求的url 记录是保存在WebViewCache.db,而url 的内容是保存在WebViewCache 文件夹下/** * 清除app缓存 */ public void clearAppCache() { //清除webview缓存 @SuppressWarnings("deprecation") File file = CacheManager.getCacheFileBaseDir(); //先删除WebViewCache目录下的文件 if (file != null && file.exists() && file.isDirectory()) { for (File item : file.listFiles()) { item.delete(); } file.delete(); } deleteDatabase("webview.db"); deleteDatabase("webview.db-shm"); deleteDatabase("webview.db-wal"); deleteDatabase("webviewCache.db"); deleteDatabase("webviewCache.db-shm"); deleteDatabase("webviewCache.db-wal"); //清除数据缓存 clearCacheFolder(getFilesDir(),System.currentTimeMillis()); clearCacheFolder(getCacheDir(),System.currentTimeMillis()); //2.2版本才有将应用缓存转移到sd卡的功能 if(isMethodsCompat(android.os.Build.VERSION_CODES.FROYO)){ clearCacheFolder(getExternalCacheDir(this),System.currentTimeMillis()); } } /** * 清除缓存目录 * @param dir 目录 * @param numDays 当前系统时间 * @return */ private int clearCacheFolder(File dir, long curTime) { int deletedFiles = 0; if (dir!= null && dir.isDirectory()) { try { for (File child:dir.listFiles()) { if (child.isDirectory()) { deletedFiles += clearCacheFolder(child, curTime); } if (child.lastModified() < curTime) { if (child.delete()) { deletedFiles++; } } } } catch(Exception e) { e.printStackTrace(); } } return deletedFiles; }
- Android APP中清除缓存功能详解
- Android APP中清除缓存功能详解
- Android APP中清除缓存功能详解
- android APP清除缓存功能
- android 清除缓存功能
- Android中获取缓存大小和清除缓存功能
- Android开发之清除缓存功能实现方法,可以集成在自己的app中,增加一个新功能。
- android清除缓存功能实现
- Android清除缓存功能实现
- 给App添加缓存功能、清除缓存功能
- [Android]应用中实现清除缓存的功能
- [Android]应用中实现清除缓存的功能
- android清除缓存后 app启动不了
- android中清除缓存数据
- Android中如何清除缓存
- Android中清除缓存模块
- iOS 设置中清除缓存功能
- Android记录20-获取缓存大小和清除缓存功能
- solaris 10 进行 nginx的安装
- seo优化注重网站的优化定向很重要
- php的自动加载类
- Apache Common StringUtils工具类
- modlesim 破解
- Android APP中清除缓存功能详解
- 博客营销怎样开展
- 西安铁路局高效云计算平台建设
- apache模块开发之helloworld
- POJ1947 Rebuilding Roads
- 程序员技术练级攻略
- Twitter模块开发
- 【转】返回lua一个table
- 2013Esri全球用户大会Q&A之GIS发展状况和趋势