Android 清空缓存

时间:2023-03-09 09:13:16
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());