/**

* 获取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清理缓存实现,android之清理缓存实现相关推荐

  1. android 清理缓存动画,Android仿微信清理内存图表动画(解决surfaceView屏幕闪烁问题)demo实例详解...

    最近接了一个项目其中有功能要实现一个清理内存,要求和微信的效果一样.于是想到用surfaceView而不是继承view.下面小编给大家解析下实现思路. surfaceView是为了解决频繁绘制动画产生 ...

  2. android清除缓存 代码,Android应用开发之Android应用清除缓存一般清理目录和代码的教程...

    本文将带你了解Android应用开发Android应用清除缓存一般清理目录和代码的教程,希望本文对大家学Android有所帮助. 一个应用安装完成,会有缓存,缓存一般分为内部存储的和外置的,内存中路径 ...

  3. 苹果微信浏览器html缓存图片吗,h5清理微信浏览器网页缓存

    前言: 缓存这个问题的出现,真真切切的感受到微信浏览器这鬼东西对前端程序员充满了恶意,捋捋自己的发型,甚是恐慌(顿时有种想转php的冲动,有木有). 解决方案: 出现缓存问题导致用户出现很多车祸现场( ...

  4. Android RecyclerView 绘制流程及Recycler缓存,Android开发者必看避坑指南

    - mState.mIsMeasuring = false; if (mState.mLayoutStep == State.STEP_START) { dispatchLayoutStep1(); ...

  5. android 内部存储 清空,Android清空应用内部文件缓存

    Android应用中加载的图片以及一些数据缓存怎么清掉呢?最近在做项目中遇到了这个问题,网上搜了一下找到了不少的源代码,综合了这些源码,下面给大家说一下吧,怎么有效的清除应用内存的缓存信息? 清除应用 ...

  6. Android开源框架——图片加载与缓存库 Picasso

    介绍 Picasso是由Square开发的一款图片库,具有强大的下载与缓存功能,可以对图片进行处理.它简化了来自外部图片的处理过程,尤其是远程图片. 开源地址:https://github.com/s ...

  7. android glide的历史,Android 图片加载的那些事:为什么你的Glide 缓存没有起作用?...

    前言Glide,该功能非常强大 Android  图片加载开源框架 相信大家并不陌生 正由于他的功能强大,所以它的源码非常复杂,这导致很多人望而却步 本人尝试将 Glide 的功能进行分解,并单独针对 ...

  8. Android之Bitmap高效缓存以及android缓存策略

    Android之Bitmap高效缓存 一.Bitmap高效加载 1.bitmap的基本概念 位图:获取像素值进行加载. Bitmap是Android系统中图像处理中的最重要的一个类. 通过Bitmap ...

  9. android分享图片功能实现原理,Android:简单实现并理解图片三级缓存

    学习Android网络开发的过程中,势必会经历很多痛苦的过程,其中一个大坑就是图片缓存,当然现在有很多现成的库非常方便,常常几行代码就可以实现想要的功能,但不懂其中的原理是不行的,所以对于刚开始学习网 ...

  10. IDEA:生成javadoc/断点调试/缓存和索引的清理

    断点调试 1.Debug设置 选择shared memory: 2.常用断点调试快捷键: 3.条件断点: 可以在调试的时候,在循环里增加条件判断 在断点处右击调出条件断点,可以再满足某个条件下,实施断 ...

最新文章

  1. Android端访问服务器核心代码
  2. 计算机操作系统开启审计功能,深入浅出理解操作系统安全
  3. KVM虚拟机添加硬盘
  4. bat脚本中如何多次键盘输入并判断_电脑上如何多开微信?PC端多开微信的方法
  5. python3爬虫入门实例_10个python爬虫入门实例(小结)
  6. Java基础学习总结(167)——Java项目实践中如何实现幂等
  7. Dijkstra算法(朴素,堆优化)+例题
  8. Axure导入元件库和使用
  9. 东南大学2014计算机考研真题,2014年东南大学920信号数电考研真题(回忆版)
  10. firebug和firepath插件下载安装
  11. java开发系统架构_Java开发:ECP系统J2EE架构开发平台
  12. 15.2,opencv绘制人脸识别框
  13. Leetcode典型题解答和分析、归纳和汇总——T51(N皇后)
  14. Opencv基础使用3——HDR 图像合成
  15. 打通链上链下,构建全链条可信价值生态—长安链预言机
  16. 单元测试总结反思_语文单元考试反思
  17. 2022-2028全球静电模拟器枪行业调研及趋势分析报告
  18. Virgin Voyages将提供按需香槟配送服务“Shake for Champagne™”
  19. 读书笔记 - I heart logs
  20. Python | 爬虫抓取智联招聘(基础版)

热门文章

  1. 2019寒假作业2 编辑总结
  2. 阿里云虚拟主机装Wordpress怎么弄?
  3. ubuntu 16.04连不上wifi解决了
  4. mysql住址数据类型_MySql数据类型
  5. 美通企业日报 | 阿斯利康在京建中国北部总部;安踏用废弃塑料瓶打造环保服装...
  6. layaair发布html5,LayaAir今日全球首发 HTML5将步入重度精品时代
  7. 李彦宏一句“车水马龙”,中国AI的一幕天地宽广
  8. 【Android 低电耗/Doze原理---设备运动状态和位置对Doze模式的影响】
  9. [STM32F4]STM32F407 ADC采集+DMA传输
  10. python进制转化器(任意进制)