Android 清空缓存
APP开发中常有计算缓存大小和清空缓存的功能,此功能很常见,几乎每个应用都能看到,下面就用代码来实现此功能:
步骤为:
1、获取缓存路径
获取长时间保存的文件,Context.getExternalFilesDir();
存储位置,SDCard/Android/data/你的应用的包名/files/
获取临时缓存, Context.getExternalCacheDir();
存储位置,SDCard/Android/data/你的应用包名/cache/
2、删除缓存
- package com.smartcontrol.utils;
- import java.io.File;
- import java.math.BigDecimal;
- import android.content.Context;
- import android.os.Environment;
- /**
- * 清除缓存
- *
- */
- public class CleanMessageUtil {
- /**
- * @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);
- }
- /**
- * @param context
- * 删除缓存
- */
- public static void clearAllCache(Context context) {
- deleteDir(context.getCacheDir());
- if (Environment.getExternalStorageState().equals(
- Environment.MEDIA_MOUNTED)) {
- deleteDir(context.getExternalCacheDir());
- }
- }
- private static boolean deleteDir(File dir) {
- if (dir != null && dir.isDirectory()) {
- String[] children = dir.list();
- int size = ;
- if (children != null) {
- size = children.length;
- for (int i = ; i < size; i++) {
- boolean success = deleteDir(new File(dir, children[i]));
- if (!success) {
- return false;
- }
- }
- }
- }
- if (dir == null) {
- return true;
- } else {
- return dir.delete();
- }
- }
- // 获取文件
- // Context.getExternalFilesDir() --> SDCard/Android/data/你的应用的包名/files/
- // 目录,一般放一些长时间保存的数据
- // Context.getExternalCacheDir() -->
- // SDCard/Android/data/你的应用包名/cache/目录,一般存放临时缓存数据
- public static long getFolderSize(File file) throws Exception {
- long size = ;
- try {
- File[] fileList = file.listFiles();
- int size2 = ;
- if (fileList != null) {
- size2 = fileList.length;
- for (int i = ; 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;
- }
- /**
- * 格式化单位
- * 计算缓存的大小
- * @param size
- * @return
- */
- public static String getFormatSize(double size) {
- double kiloByte = size / ;
- if (kiloByte < ) {
- // return size + "Byte";
- return "0K";
- }
- double megaByte = kiloByte / ;
- if (megaByte < ) {
- BigDecimal result1 = new BigDecimal(Double.toString(kiloByte));
- return result1.setScale(, BigDecimal.ROUND_HALF_UP)
- .toPlainString() + "KB";
- }
- double gigaByte = megaByte / ;
- if (gigaByte < ) {
- BigDecimal result2 = new BigDecimal(Double.toString(megaByte));
- return result2.setScale(, BigDecimal.ROUND_HALF_UP)
- .toPlainString() + "MB";
- }
- double teraBytes = gigaByte / ;
- if (teraBytes < ) {
- BigDecimal result3 = new BigDecimal(Double.toString(gigaByte));
- return result3.setScale(, BigDecimal.ROUND_HALF_UP)
- .toPlainString() + "GB";
- }
- BigDecimal result4 = new BigDecimal(teraBytes);
- return result4.setScale(, BigDecimal.ROUND_HALF_UP).toPlainString()
- + "TB";
- }
- }
上面代码是封装好的的类,点击调用时:
- CleanMessageUtil.clearAllCache(getApplicationContext());
Android 清空缓存的更多相关文章
- Android之计算缓存大小并且清空缓存
转载博客:http://www.2cto.com/kf/201503/385492.html 项目中碰到了计算缓存大小和清空缓存的功能,这个很常见的功能,几乎每个APP都有,以为实现很简单,网上搜了一 ...
- Android图片缓存之Lru算法
前言: 上篇我们总结了Bitmap的处理,同时对比了各种处理的效率以及对内存占用大小.我们得知一个应用如果使用大量图片就会导致OOM(out of memory),那该如何处理才能近可能的降低oom发 ...
- android 端缓存清理的实现
首先关于缓存清理,网上已经有太多的工具类,但是遗憾的是,基本上都不完善,或者说根本就不能用,而项目中又要求实现这个烂东西(其实这玩意真没一点屁用,毕竟第三方清理/杀毒软件都带这么一个功能),但是只好硬 ...
- Android图片缓存之Glide进阶
前言: 前面学习了Glide的简单使用(Android图片缓存之初识Glide),今天来学习一下Glide稍微复杂一点的使用. 图片缓存相关博客地址: Android图片缓存之Bitmap详解 And ...
- Android图片缓存之初识Glide
前言: 前面总结学习了图片的使用以及Lru算法,今天来学习一下比较优秀的图片缓存开源框架.技术本身就要不断的更迭,从最初的自己使用SoftReference实现自己的图片缓存,到后来做电商项目自己的实 ...
- Android图片缓存之Bitmap详解
前言: 最近准备研究一下图片缓存框架,基于这个想法觉得还是先了解有关图片缓存的基础知识,今天重点学习一下Bitmap.BitmapFactory这两个类. 图片缓存相关博客地址: Android图片缓 ...
- android 双缓存机制
废话不多说,直接贴代码! 所谓的双缓存,第一就是缓存在内存里面,第二就是缓存在SD卡里面,当你需要加载数据时,先去内存缓存中查找,如果没有再去SD卡中查找,并且用户可以自选使用哪种缓存! 缓存内存和缓 ...
- Firefox每次刷新时自动清空缓存的设置方法
当我们开发网页应用时候,为了保证每次看到的页面是最新的,需要在刷新页面时清除页面缓存. 如果每次都手动清除比较麻烦,好在多数浏览器都支持自动清除缓存的功能. IE下我们可以将缓存设置为"每次 ...
- Android数据缓存(转)
Android数据缓存 1.http://blog.csdn.net/lnb333666/article/details/8460159 2.https://github.com/Trinea/a ...
随机推荐
- 使用官方组件下载图片,保存到MySQL数据库,保存到MongoDB数据库
需要学习的地方,使用官方组件下载图片的用法,保存item到MySQL数据库 需要提前创建好MySQL数据库,根据item.py文件中的字段信息创建相应的数据表 1.items.py文件 from sc ...
- 39.date hitogram基础知识
主要知识点: date hitogram之统计每月电视销量 上一节讲到histogram,他是以数值进行分组.本节讲到以日期进行bucket分组操作,也就是说把连续的日期变成离散的日期区间,然 ...
- css3 background-clip和background-origin 区别
在css3中,background-clip和background-origin它们2个的功能大致相同,但又有些细微差别. 1.background-clip:规定背景的绘制区域,当背景是纯颜色时与图 ...
- odoo widget 标签介绍
widget="statusbar" 头部状态条标签 widget="email" 电子邮件地址标签 widget="selection" ...
- [cogs736][网络流24题#13]星际转移[网络流,网络判定]
将一个空间站分为天数个点,每次枚举天数,每增加一天就把对应天数的边连上,用网络流判定可行性,即-判断最大流是否不小于k,注意编号不要错位.通过此题,可见一些网络流题目需要用到网络判定方法,但虽然答案具 ...
- 开启mysql远程连接
mysql默认只允许本地连接,也就是说,在安装完mysql后会存在两个root账户,他们的host分别是localhost和127.0.0.1 use mysql; update user set h ...
- supervisord进程管理工具小结
前言 昨天临近下班,发现业务队列处理不及时,正好想到不久之前,上了一个新功能:通过队列异步转发微信消息.可能是消息太多了处理不过来,没怎么多想,处理不过来了,多增加处理进程就可以了,后来发现自己so ...
- OpenCV使用GPU
在使用OpenCV2.4.x的时候,以为不用重新编译可以直接使用GPU模块,不过在我使用的时候,发现使用getCudaEnabledDeviceCount()的时候,总是获得是0,于是重新编译Open ...
- Machine_learning--score
辛苦了2个半月,终须学完了machine-learning watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY2hyaXN0cHJpbmNlMDA3/font ...
- BPMN使用工具
EA 非常多设计人员都在使用EA.他不仅支持UML,相同也全然支持BPMN2.0.<BPMN规范中的三种视图 >展示的BPMN中三种视图就是使用此工具所绘制. activitidesig ...