Android 清除缓存详细实现(显示缓存大小)

简介: Android 清除缓存详细实现(显示缓存大小)

清除缓存功能算是个十分鸡肋的功能了,但是大多数产品或者客户都希望有这么个东西显得APP功能完善,网上有很多,但是对于新手来说,那些感觉并不详细,我贴个完整到小白都能懂的。

下面是工具类,包含清除缓存、获取缓存文件大小、格式化方法。

总之就是工具,自己创建一个帖进去。

public class CacheDataManager {undefined

public static String getTotalCacheSize(Context context) throws Exception {undefined

long cacheSize = getFolderSize(context.getCacheDir());

if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {undefined

cacheSize += getFolderSize(context.getExternalCacheDir());

}

return getFormatSize(cacheSize);

}

public static void clearAllCache(Context context) {undefined

deleteDir(context.getCacheDir());

if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {undefined

deleteDir(context.getExternalCacheDir());

}

}

private static boolean deleteDir(File dir) {undefined

if (dir != null && dir.isDirectory()) {undefined

String[] children = dir.list();

for (int i = 0; i < children.length; i++) {undefined

boolean success = deleteDir(new File(dir, children[i]));

if (!success) {undefined

return false;

}

}

}

return dir.delete();

}

// 获取文件

// Context.getExternalFilesDir() --> SDCard/Android/data/你的应用的包名/files/

// 目录,一般放一些长时间保存的数据

// Context.getExternalCacheDir() -->

// SDCard/Android/data/你的应用包名/cache/目录,一般存放临时缓存数据

public static long getFolderSize(File file) throws Exception {undefined

long size = 0;

try {undefined

File[] fileList = file.listFiles();

for (int i = 0; i < fileList.length; i++) {undefined

// 如果下面还有文件

if (fileList[i].isDirectory()) {undefined

size = size + getFolderSize(fileList[i]);

} else {undefined

size = size + fileList[i].length();

}

}

} catch (Exception e) {undefined

e.printStackTrace();

}

return size;

}

/**

* 格式化单位

*

* @param size

*/

public static String getFormatSize(double size) {undefined

double kiloByte = size / 1024;

if (kiloByte < 1) {undefined

return size + "Byte";

}

double megaByte = kiloByte / 1024;

if (megaByte < 1) {undefined

BigDecimal result1 = new BigDecimal(Double.toString(kiloByte));

return result1.setScale(2, BigDecimal.ROUND_HALF_UP).toPlainString() + "KB";

}

double gigaByte = megaByte / 1024;

if (gigaByte < 1) {undefined

BigDecimal result2 = new BigDecimal(Double.toString(megaByte));

return result2.setScale(2, BigDecimal.ROUND_HALF_UP).toPlainString() + "MB";

}

double teraBytes = gigaByte / 1024;

if (teraBytes < 1) {undefined

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";

}

}

在你要显示的TextView上显示清理前的缓存大小,在Activity的onCreate()方法中直接设置就好了,其实就是调用了上面工具类的getTotalCacheSize()方法,有异常,需要捕获。

try {undefined

txtCacheSize.setText(CacheDataManager.getTotalCacheSize(this));

} catch (Exception e) {undefined

e.printStackTrace();

}

再创建一个内部类,用于清理内存,实现了一个Runnable,清理完后发一个消息,这里可以灵活一点。

class clearCache implements Runnable {

@Override

public void run() {undefined

try {undefined

CacheDataManager.clearAllCache(SettingsActivity.this);

Thread.sleep(3000);

if (CacheDataManager.getTotalCacheSize(SettingsActivity.this).startsWith("0")) {undefined

handler.sendEmptyMessage(0);

}

} catch (Exception e) {undefined

return;

}

}

}

创建一个Handle接收消息,处理结果,其实用意是清理完了就弹一个吐司,清理完成,就是这样,也可以创建一个dialog,开始清理的时候显示,在下面方法关闭,然后再设置一遍TextView,就是下面这样。

private Handler handler = new Handler() {

public void handleMessage(android.os.Message msg) {undefined

switch (msg.what) {undefined

case 0:

Toast.makeText(SettingActivity.this,"清理完成",Toast.LENGTH_SHORT).show();

try {undefined

txtCacheSize.setText(CacheDataManager.getTotalCacheSize(SettingsActivity.this));

} catch (Exception e) {undefined

e.printStackTrace();

}

}

};

};

相关文章
|
6月前
|
存储 缓存 Android开发
安卓Jetpack Compose+Kotlin, 使用ExoPlayer播放多个【远程url】音频,搭配Okhttp库进行下载和缓存,播放完随机播放下一首
这是一个Kotlin项目,使用Jetpack Compose和ExoPlayer框架开发Android应用,功能是播放远程URL音频列表。应用会检查本地缓存,如果文件存在且大小与远程文件一致则使用缓存,否则下载文件并播放。播放完成后或遇到异常,会随机播放下一首音频,并在播放前随机设置播放速度(0.9到1.2倍速)。代码包括ViewModel,负责音频管理和播放逻辑,以及UI层,包含播放和停止按钮。
|
Android开发
flutter中实现仿Android端的onResume和onPause方法
flutter中实现仿Android端的onResume和onPause方法
|
4月前
|
缓存 安全 Android开发
Android经典实战之用Kotlin泛型实现键值对缓存
本文介绍了Kotlin中泛型的基础知识与实际应用。泛型能提升代码的重用性、类型安全及可读性。文中详细解释了泛型的基本语法、泛型函数、泛型约束以及协变和逆变的概念,并通过一个数据缓存系统的实例展示了泛型的强大功能。
45 2
|
2月前
|
缓存 Java Shell
Android 系统缓存扫描与清理方法分析
Android 系统缓存从原理探索到实现。
74 15
Android 系统缓存扫描与清理方法分析
|
3月前
|
存储 缓存 Android开发
Android RecyclerView 缓存机制深度解析与面试题
本文首发于公众号“AntDream”,详细解析了 `RecyclerView` 的缓存机制,包括多级缓存的原理与流程,并提供了常见面试题及答案。通过本文,你将深入了解 `RecyclerView` 的高性能秘诀,提升列表和网格的开发技能。
77 8
|
5月前
|
缓存 编解码 安全
Android经典面试题之Glide的缓存大揭秘
Glide缓存机制包括内存和硬盘缓存。内存缓存使用弱引用的ActiveResources和LRU策略,硬盘缓存利用DiskLruCache。Engine.load方法首先尝试从内存和弱引用池加载,然后从LRU缓存中加载图片,增加引用计数并移出LRU。若缓存未命中,启动新任务或加入现有任务。内存大小根据设备内存动态计算,限制在0.4以下。DiskLruCache使用自定义读写锁,保证并发安全,写操作通过锁池管理,确保高效。
138 0
|
7月前
|
XML 缓存 Java
Android App开发之利用Glide实现图片的三级缓存Cache讲解及实战(附源码 超详细必看 简单易懂)
Android App开发之利用Glide实现图片的三级缓存Cache讲解及实战(附源码 超详细必看 简单易懂)
334 0
|
缓存
thinkphp5.0清除缓存、模版缓存和日志缓存的方法
thinkphp5.0清除缓存、模版缓存和日志缓存的方法
102 0
|
缓存 NoSQL 测试技术
实战SSM_O2O商铺_47【Redis缓存】清除缓存接口的开发
实战SSM_O2O商铺_47【Redis缓存】清除缓存接口的开发
98 0
|
缓存 Java Android开发
Android C++ 系列:JNI 调用时缓存字段和方法 ID
通常我们通过 FindClass 、GetFieldID、GetMethodID 去找到对应的信息也是耗时操作,如果方法被频繁调用(特别是像音视频处理时循环的调用JNI方法传递音视频数据),每次都去查找对应的类和方法ID会很耗性能,所以我们必须将它们缓存起来,达到只创建一次,后面直接使用缓存内容的效果。
162 0