zoukankan      html  css  js  c++  java
  • 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 = 0;
                if (children != null) {
                    size = children.length;
                    for (int i = 0; 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 = 0;
            try {
                File[] fileList = file.listFiles();
                int size2 = 0;
                if (fileList != null) {
                    size2 = fileList.length;
                    for (int i = 0; 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 / 1024;
            if (kiloByte < 1) {
                // return size + "Byte";
                return "0K";
            }
    
            double megaByte = kiloByte / 1024;
            if (megaByte < 1) {
                BigDecimal result1 = new BigDecimal(Double.toString(kiloByte));
                return result1.setScale(2, BigDecimal.ROUND_HALF_UP)
                        .toPlainString() + "KB";
            }
    
            double gigaByte = megaByte / 1024;
            if (gigaByte < 1) {
                BigDecimal result2 = new BigDecimal(Double.toString(megaByte));
                return result2.setScale(2, BigDecimal.ROUND_HALF_UP)
                        .toPlainString() + "MB";
            }
    
            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";
        }
    }

    上面代码是封装好的的类,点击调用时:

    CleanMessageUtil.clearAllCache(getApplicationContext());
  • 相关阅读:
    [转载]游戏外挂原理
    python cookbook
    RF user guide
    测试理论-selenium的工作原理
    测试理论- the conten of test plan
    测试理论--branch testing and boundary testing
    测试理论--向高级出发
    fiddler安装及配置
    python 面试题: 列表表达式
    [redis]如何将redis设置成diango的cache backend
  • 原文地址:https://www.cnblogs.com/zhujiabin/p/7718820.html
Copyright © 2011-2022 走看看