文档章节

android开发清理应用缓存

汇聚成河
 汇聚成河
发布于 2017/01/18 16:27
字数 415
阅读 8
收藏 0

直接上代码

import java.io.File;
import java.math.BigDecimal;
import android.content.Context;
import android.os.Environment;
//清理应用缓存
public class DataCleanManager {
	private static String imageFile = Environment.getExternalStorageDirectory()
			+ "/图片文件夹路径";// 图片文件夹所在路径
	public static double getTotalCacheSize(Context context) throws Exception {
		long cacheSize = getFolderSize(context.getCacheDir());//获取应用内部缓存
		if (Environment.getExternalStorageState().equals(
				Environment.MEDIA_MOUNTED)) {
			cacheSize += getFolderSize(context.getExternalCacheDir());//获取应用外部缓存
		}
		cacheSize += getFolderSize(new File(imageFile));//获取更改头像所在路径的内容大小
		return getFormatSize(cacheSize);
	}
	public static void clearAllCache(Context context) {
		deleteDir(context.getCacheDir());//获取应用程序的缓存目录,然后删除清空
		if (Environment.getExternalStorageState().equals(
				Environment.MEDIA_MOUNTED)) {
			deleteDir(context.getExternalCacheDir());//获取应用程序外部存储的存储目录,然后删除清空
		}
		deleteDir(new File(imageFile));//清楚图片所在路径中的内容
	}
//清空文件中的内容
	private static boolean deleteDir(File dir) {
		if (dir != null && dir.isDirectory()) {
			String[] children = dir.list();
			for (int i = 0; i < children.length; i++) {
				boolean success = deleteDir(new File(dir, children[i]));
				if (!success) {
					return false;
				}
			}
		}
		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 = 0;
		try {
			File[] fileList = file.listFiles();
			for (int i = 0; i < fileList.length; 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 double getFormatSize(double size) {
//		double kiloByte = size / 1024;
//		if (kiloByte < 1) {
//			 return size + "Byte";
//		}
//		double megaByte = kiloByte / 1024;
//		if (megaByte < 1) {
//			BigDecimal result1 = new BigDecimal(Double.toString(kiloByte));
//			return result1.setScale(2, BigDecimal.ROUND_HALF_UP)
//					.toPlainString() + "KB";
//		}
		BigDecimal result2 = new BigDecimal(Double.toString(size / (1024*1024)));
		return result2.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
//		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";
	}
}

© 著作权归作者所有

汇聚成河
粉丝 1
博文 34
码字总数 27236
作品 0
浦东
程序员
私信 提问
腾讯技术分享:Android版手机QQ的缓存监控与优化实践

本文内容整理自公众号腾讯Bugly,感谢原作者的分享。 1、问题背景 对于Android应用来说,内存向来是比较重要的性能指标。内存占用过高,会影响应用的流畅度,甚至引发OOM,非常影响用户体验。...

JackJiang2011
2018/04/08
0
0
小组分享会记录

2016/12/28 主题:面向Android开发的矢量图与矢量图动画 by 严浩 2017/1/11 主题:移动流量优化:Http缓存机制和网络图片资源 by于泽群 2017/2/8 主题:Digest认证 2017/3/08 主题:Android...

bappleug
2017/01/12
4
0
Android app的文件缓存目录

Android app的文件缓存目录可以是app内置私有的目录,当然也可以选择外置sdcard目录 内置私有目录 /data/data/[packagename]/files 文件缓存目录,一般存小的文件缓存,如果是图片,不建议放这...

michaelpan
2014/12/19
19K
0
安卓系统回回收app的文件吗

@邓凡平 你好,我是一名安卓开发者 想跟您请教个问题: 我们开发的微博 存在data/data/包名/files里面的文件 怎么在用户使用的过程中会丢失呀 同样这个应用的存在SharedPreferences的数据在用...

王大中
2013/01/24
111
1
Android memory leaks(摘抄)

至少在T-Mobile G1上Android应用在堆上分配的内存大小被限制16MB以内。对于手机来说,这是个不小的内存,但是这仍然远远不能满足一些开发者的需求。但是,即使你不打算使用所有的内存空间,你...

大疯子
2012/09/11
985
1

没有更多内容

加载失败,请刷新页面

加载更多

自定义ApiBoot Logging链路以及单元ID生成策略

ApiBoot Logging会为每一个请求都对应创建链路编号(TraceID)以及单元编号(SpanID),用于归类每一次请求日志,通过一个链路下日志单元的Parent SpanID可以进行上下级关系的梳理。 前文回顾...

恒宇少年
20分钟前
8
0
浅谈 Application 和 activity

对于 在 Application初始化一些变量,为什么不可以放在activity 或者其他的组件里呢? 这里就根据个人的理解来讲述一下,欢迎补充指正。 首先 activity 是以栈的形式出现,一个app应用会有多...

MrLins
20分钟前
8
0
Allegro的脚本文件内容里都有哪些

小伙伴们在使用Allegro的时候是否经常用到脚本文件夹呢?scr的用法其实可真不简单。。。 首先脚本文件的运行模式就存在很多种,比如不提示错误信息,不弹出确认对画框(这样很有利于我们执行...

demyar
21分钟前
16
0
微信升级外链管理规范,「砍一刀帮我加速」要被禁止了

原创: 蒋鸿昌 首发:「知晓程序」公众号 - 最好的微信新商业媒体 几天前,知名互联网评论人阑夕模仿皮尤研究中心(Pew Research Center)在美国做的互联网通识调查问卷,做了一份中文版问卷...

知晓云
22分钟前
14
0
CentOS 7接投影仪

我将一台安装着CentOS 7图形界面的惠普笔记本电脑当桌面使用。最近,想要连接投影仪时却遇到了问题。笔记本有一个HDMI接口。我买了一个HDMI---->VGA的转接线,连上笔记本电脑后,屏幕一直在闪...

大别阿郎
26分钟前
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部