Android實(shí)現(xiàn)清理緩存功能
有時(shí)候項(xiàng)目中需要清理一些緩存數(shù)據(jù)(如:圖片緩存、網(wǎng)絡(luò)數(shù)據(jù)緩存等),當(dāng)然也要對(duì)SharedPreferences存儲(chǔ)的數(shù)據(jù)進(jìn)行清理,當(dāng)然App中有個(gè)這樣的功能可能會(huì)提高逼格吧。
實(shí)現(xiàn)效果:

1、獲取緩存的大小
/*** 獲取整體緩存大小* @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);}
/*** 獲取文件* Context.getExternalFilesDir() --> SDCard/Android/data/你的應(yīng)用的包名/files/ 目錄,一般放一些長(zhǎng)時(shí)間保存的數(shù)據(jù)* Context.getExternalCacheDir() --> SDCard/Android/data/你的應(yīng)用包名/cache/目錄,一般存放臨時(shí)緩存數(shù)據(jù)* @param file* @return* @throws Exception*/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*/public static String getFormatSize(long size) {long kb = size / 1024;int m = (int) (kb / 1024);int kbs = (int) (kb % 1024);return m + "." + kbs + "M";}
/*** 清空方法* @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();for (int i = 0; i < children.length; i++) {boolean success = deleteDir(new File(dir, children[i]));if (!success) {return false;}}}return dir.delete();}
為了方便,將清除緩存的相關(guān)方法抽取成工具類,可以直接調(diào)取使用,完整的工具類如下:
public class CacheDataManager {/*** 獲取整體緩存大小* @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);}/*** 獲取文件* Context.getExternalFilesDir() --> SDCard/Android/data/你的應(yīng)用的包名/files/ 目錄,一般放一些長(zhǎng)時(shí)間保存的數(shù)據(jù)* Context.getExternalCacheDir() --> SDCard/Android/data/你的應(yīng)用包名/cache/目錄,一般存放臨時(shí)緩存數(shù)據(jù)* @param file* @return* @throws Exception*/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*/public static String getFormatSize(long size) {long kb = size / 1024;int m = (int) (kb / 1024);int kbs = (int) (kb % 1024);return m + "." + kbs + "M";}/*** 清空方法* @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();for (int i = 0; i < children.length; i++) {boolean success = deleteDir(new File(dir, children[i]));if (!success) {return false;}}}return dir.delete();????}}
工具類的使用:
獲取緩存總量
String?cacheAllSize?=?CacheDataManager.getTotalCacheSize(this)清除緩存
CacheDataManager.clearAllCache(this);主要的功能點(diǎn)已經(jīng)寫的很清楚啦,到這里就結(jié)束了,需要完整demo的童鞋后臺(tái)回復(fù):"清除緩存" 獲取哦!
評(píng)論
圖片
表情
