温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

android中怎么实现清理缓存功能

发布时间:2021-08-07 15:17:50 来源:亿速云 阅读:224 作者:Leah 栏目:编程语言

这篇文章将为大家详细讲解有关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; }

关于android中怎么实现清理缓存功能就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI