有时候项目中需要清理一些缓存数据(如:图片缓存、网络数据缓存等),当然也要对SharedPreferences存储的数据进行清理,当然App中有个这样的功能可能会提高逼格吧。

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/你的应用的包名/files/ 目录,一般放一些长时间保存的数据     * Context.getExternalCacheDir() --> SDCard/Android/data/你的应用包名/cache/目录,一般存放临时缓存数据     * @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";//        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";//        }//        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";    }    /**     * 清空方法     * @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();    }}

直接调用:

 CacheDataManager.clearAllCache(SettingActivity.this);

 其实它的清理速度是非常快的,那么做一个延时效果会让用户有一点点体验的:

    @OnClick(R.id.setting_cleancache)    void clean() {        //设置默认的等待效果        mDlg = new WaitingDlg(SettingActivity.this, "", "", true);        PromptDialog dialog = new PromptDialog(SettingActivity.this, R.string.prompt, R.string.cleancache_title);        dialog.showYesNo(new DialogInterface.OnClickListener() {            @Override            public void onClick(DialogInterface dialog, int which) {                SPUtils.clear();                mDlg.start();                new Thread(new clearCache()).start();                dialog.dismiss();            }        });    }    private Handler handler = new Handler() {        public void handleMessage(android.os.Message msg) {            switch (msg.what) {                case 0:                    mDlg.dismiss();                    Toast.makeText(SettingActivity.this, "清理完成", Toast.LENGTH_SHORT).show();                    try {                        cachetext.setText(CacheDataManager.getTotalCacheSize(SettingActivity.this));                    } catch (Exception e) {                        e.printStackTrace();                    }            }        }    };    class clearCache implements Runnable {        @Override        public void run() {            try {                CacheDataManager.clearAllCache(SettingActivity.this);                Thread.sleep(1000);                if (CacheDataManager.getTotalCacheSize(SettingActivity.this).startsWith("0")) {                    handler.sendEmptyMessage(0);                }            } catch (Exception e) {                return;            }        }    }

 

更多相关文章

  1. Android串口开发
  2. android之简单数据存储Preference
  3. Android(安卓)Jamendo开源在线音乐播放器源码分析七 数据缓存和
  4. Android(安卓)源码环境下 C++通过aidl与java层系统服务通信
  5. IPCThreadState 详解
  6. android 网络状态
  7. delphi xe5 android 开发数据访问手机端(二)
  8. Android(安卓)连接Mysql数据库步骤(新手步骤)
  9. android 导出带数据库文件的APK

随机推荐

  1. Android实现程序前后台切换效果(类似QQ后
  2. Android应用程序的自动更新升级(自身升级
  3. Android(安卓)Camera 使用小结
  4. 关于android 双击事件
  5. Android简单自定义布局介绍
  6. 10个经典的Android开源项目(附源码包)
  7. “终于懂了” 系列:Android屏幕刷新机制—
  8. Android(安卓)RIL使用详解
  9. Android快速启动要点总结
  10. Android(安卓)自定义属性时TypedArray的