android之清理缓存实现

一. 清理缓存首先要搞清楚清理哪些东西,

  1. app本身的功能比如录像,录音,更新都会产生文件,需要清理
  2. app的默认缓存地址cache

二. 搞清楚要清理的文件夹位置

  1. 首先app自身的功能就要看自己把它放在了什么位置
  2. 默认缓存地址:getActivity().getExternalCacheDir();
    这个位置是在storage/emulated/0/Android/data/com.xxxxxapp/cache

三. 搞起
代码功能模块:

  1. 获取app缓存大小,以字节为单位
  2. 获取某个文件夹的大小,以字节为单位
  3. 把字节单位换算成常用单位
  4. 把缓存大小设置到页面,清理前一次,清理后一次
  5. 删除文件夹功能
  6. 清除app缓存
    /**     * 获取app的缓存大小     * 1. 录制的视频/storage/emulated/0/xueliangapp/video/1573972925136.mp4     * 2. 录制的音频/storage/emulated/0/xueliangapp/radio/1573972925136.amr     * 3. 下载的更新包/storage/emulated/0/Android/data/com.sdxzt.xueliangapp_v3/files/Download/xueliang_update.apk     * 4. 缓存/storage/emulated/0/Android/data/com.sdxzt.xueliangapp_v3/cache     */    File videoDir,radioDir,filesDir,cacheDir;    private String  getAppCache(){        long fileSize = 0;        String cacheSize = "0KB";        videoDir  = new File(Environment.getExternalStorageDirectory()+"/xueliangapp/video");        Log.d(TAG, "getAppCache: videoDir大小: "+getDirSize(videoDir));        radioDir  = new File(Environment.getExternalStorageDirectory()+"/xueliangapp/radio");        Log.d(TAG, "getAppCache: radioDir大小: "+getDirSize(radioDir));        filesDir = getActivity().getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS);        Log.d(TAG, "getAppCache: filesDir大小: "+getDirSize(filesDir));        ///storage/emulated/0/Android/data/com.sdxzt.xueliangapp_v3/files,这里面有download文件夹,里面是下载的更新包        cacheDir = getActivity().getExternalCacheDir();        Log.d(TAG, "getAppCache: cacheDir大小: "+getDirSize(cacheDir));        ///storage/emulated/0/Android/data/com.sdxzt.xueliangapp_v3/cache        fileSize += getDirSize(getActivity().getFilesDir());        fileSize += getDirSize(getActivity().getCacheDir());//这行是默认的缓存地址,看图片什么的会在这里积累缓存        fileSize += getDirSize(videoDir);        fileSize += getDirSize(radioDir);        fileSize += getDirSize(filesDir);        fileSize += getDirSize(cacheDir);        String fileSizeStr = formatFileSize(fileSize);        Log.d(TAG, "getAppCache: 总缓存大小: "+fileSizeStr);        return  fileSizeStr;    }    /**     * 获取文件大小(字节为单位)     * @param dir     * @return     */    private long getDirSize(File dir) {        if (dir == null) {            return 0;        }        if (!dir.isDirectory()) {            return 0;        }        long dirSize = 0;        File[] files = dir.listFiles();        for (File file : files) {            if (file.isFile()) {                dirSize += file.length();//文件的长度就是文件的大小            } else if (file.isDirectory()) {                dirSize += file.length();                dirSize += getDirSize(file); // 递归调用继续统计            }        }        return dirSize;    }    /**     * 格式化文件长度     * @param fileSize     * @return     */    private String formatFileSize(long fileSize){        DecimalFormat df = new DecimalFormat("#0.00");//表示小数点前至少一位,0也会显示,后保留两位        String fileSizeString = "";       if (fileSize < 1024) {            fileSizeString = df.format((double) fileSize) + "B";        } else if (fileSize < 1048576) {            fileSizeString = df.format((double) fileSize / 1024) + "KB";        } else if (fileSize < 1073741824) {            fileSizeString = df.format((double) fileSize / 1048576) + "MB";        } else {            fileSizeString = df.format((double) fileSize / 1073741824) + "G";        }        return fileSizeString;    }    private void setAppCache() {        String fileSize = getAppCache();        fileSizeTv.setText(fileSize);        Log.d(TAG, "setAppCache: 重新显示缓存大小");        Log.d(TAG, "setAppCache: 当前缓存"+fileSize);    }    public  void clearAppCache(final Activity activity){        final Handler handler = new Handler(){            @Override            public void handleMessage(@NonNull Message msg) {                super.handleMessage(msg);                Log.d(TAG, "handlerMessage: ");                if (msg.what == 1) {                    setAppCache();                    Log.d(TAG, "handlerMessage: 缓存清除完毕");                    ToastUtil.showMsg(getActivity(),"缓存清除完毕");                }else {                    ToastUtil.showMsg(getActivity(),"缓存清除失败");                    Log.d(TAG, "handlerMessage: 缓存清除失败");                }            }        };        new Thread(new Runnable() {            @Override            public void run() {                Log.d(TAG, "run: ");                Message msg = new Message();                try {                    clearCacheFolder(videoDir,System.currentTimeMillis());                    clearCacheFolder(radioDir,System.currentTimeMillis());                    clearCacheFolder(filesDir,System.currentTimeMillis());                    clearCacheFolder(cacheDir,System.currentTimeMillis());                    msg.what = 1;                }catch (Exception e){                    e.printStackTrace();                    msg.what = -1;                }                handler.sendMessage(msg);            }        }).start();    }    /**     * 清除缓存目录     * @param dir 目录     * @param curTime 当前系统时间     */    private int clearCacheFolder(File dir,long curTime){        int deletedFiles = 0;        if (dir!= null && dir.isDirectory()) {            try {                for (File child:dir.listFiles()) {                    if (child.isDirectory()) {                        deletedFiles += clearCacheFolder(child, curTime);                    }                    if (child.lastModified() < curTime) {                        if (child.delete()) {                            deletedFiles++;                        }                    }                }            } catch(Exception e) {                e.printStackTrace();            }        }        Log.d(TAG, "clearCacheFolder: 清除目录: "+dir.getAbsolutePath());        return deletedFiles;  }

更多相关文章

  1. Android训练课程(Android(安卓)Training) - 使用Volley传输网络
  2. android proc 进程信息解析
  3. Android(安卓)DatePicker,NumPicker解析(分割线颜色及调整大小)
  4. Android(安卓)WebView总结
  5. 详细讲解Android(安卓)View的绘制流程
  6. APK文件粗略介绍
  7. android 应用程序自适应屏幕大小
  8. Android(安卓)Shape使用
  9. android实现m3u8直播缓存/下载,M3U8Manger

随机推荐

  1. 浅谈android的selector背景选择器
  2. js调用android本地代码失败 兼容问题
  3. [译]提升Android应用性能的小贴士
  4. Android(安卓)图解向 Android(安卓)Studi
  5. Android中@id与@+id区别
  6. Android(安卓)APK应用安装原理(1)-解析An
  7. android 绘图
  8. Android里面的命名规范
  9. [置顶] android软键盘弹出,会把原来的界面
  10. 修改Android开机画面