<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Android實(shí)現(xiàn)清理緩存功能

          共 4909字,需瀏覽 10分鐘

           ·

          2021-11-08 11:41

          有時(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)效果:



          該效果是根據(jù)之前demo基礎(chǔ)上實(shí)現(xiàn)的,所以上面部分的作用主要是為了產(chǎn)生緩存,方便看到清除的效果。

          這篇內(nèi)容主要包括獲取緩存的大小和對(duì)獲取的緩存進(jì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);    }

          2、獲取文件
               /**     * 獲取文件     * 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;    }


          3、格式化單位
               /**     * 格式化單位     * @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";    }


          4、清除緩存
               /**     * 清空方法     * @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ù):"清除緩存" 獲取哦!

          瀏覽 40
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  亚洲三级精品视频 | 伊人亚洲中文字幕 | 影音先锋日韩三级片 | 影音先锋女人av鲁色资源网小说 | 成人A片无码水蜜桃免费网站软件 |