清除Glide缓存
Glide自带清除缓存的功能,分别对应Glide.get(context).clearDiskCache();(清除磁盘缓存)与Glide.get(context).clearMemory();(清除内存缓存)两个方法.其中clearDiskCache()方法必须运行在子线程,clearMemory()方法必须运行在主线程,这是这两个方法所强制要求的,详见源码.
获取Glide缓存空间大小
这个网上也有过一些介绍,但是给出的实现代码存在一些问题,我这里做了一定的修改.一下方法适合在Glide为默认的缓存目录的情况,不论是内部存储空间还是外部.因为我们可以通过InternalCacheDiskCacheFactory.DEFAULT_DISK_CACHE_DIR与ExternalCacheDiskCacheFactory.DEFAULT_DISK_CACHE_DIR获取到位于内部与外部存储的缓存文件夹的文件夹名,并通过context.getCacheDir()与context.getExternalCacheDir()获取内部与外部存储的路径.进而可以通过遍历文件夹内的文件进行缓存文件大小求和与全部清除.以下工具类在其他的文章中有前辈写过,但是存在一些已知的问题,这里做了一些修改.
import android.content.Context;import android.os.Looper;import android.text.TextUtils;import com.bumptech.glide.Glide;import com.bumptech.glide.load.engine.cache.ExternalCacheDiskCacheFactory;import com.bumptech.glide.load.engine.cache.InternalCacheDiskCacheFactory;import java.io.File;import java.math.BigDecimal;public class GlideCacheUtil {private static GlideCacheUtil inst;public static GlideCacheUtil getInstance() {if (inst == null) {inst = new GlideCacheUtil();}return inst;}public void clearImageDiskCache(Context context) {try {if (Looper.myLooper() == Looper.getMainLooper()) {new Thread(new Runnable() {@Overridepublic void run() {Glide.get(context).clearDiskCache();// BusUtil.getBus().post(new GlideCacheClearSuccessEvent());}}).start();} else {Glide.get(context).clearDiskCache();}} catch (Exception e) {e.printStackTrace();}}public void clearImageMemoryCache(Context context) {try {if (Looper.myLooper() == Looper.getMainLooper()) { //只能在主线程执行Glide.get(context).clearMemory();}} catch (Exception e) {e.printStackTrace();}}public void clearImageAllCache(Context context) {clearImageDiskCache(context);clearImageMemoryCache(context);String ImageExternalCatchDir=context.getExternalCacheDir()+ExternalCacheDiskCacheFactory.DEFAULT_DISK_CACHE_DIR;deleteFolderFile(ImageExternalCatchDir, true);}public String getCacheSize(Context context) {try {return getFormatSize(getFolderSize(new File(context.getCacheDir() + "/"+InternalCacheDiskCacheFactory.DEFAULT_DISK_CACHE_DIR)));} catch (Exception e) {e.printStackTrace();}return "";}private long getFolderSize(File file) throws Exception {long size = 0;try {File[] fileList = file.listFiles();for (File aFileList : fileList) {if (aFileList.isDirectory()) {size = size + getFolderSize(aFileList);} else {size = size + aFileList.length();}}} catch (Exception e) {e.printStackTrace();}return size;}private void deleteFolderFile(String filePath, boolean deleteThisPath) {if (!TextUtils.isEmpty(filePath)) {try {File file = new File(filePath);if (file.isDirectory()) {File files[] = file.listFiles();for (File file1 : files) {deleteFolderFile(file1.getAbsolutePath(), true);}}if (deleteThisPath) {if (!file.isDirectory()) {file.delete();} else {if (file.listFiles().length == 0) {file.delete();}}}} catch (Exception e) {e.printStackTrace();}}}private static String getFormatSize(double size) {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";}}
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
软考中级精品资料免费领
- 历年真题答案解析
- 备考技巧名师总结
- 高频考点精准押题
- 资料下载
- 历年真题
193.9 KB下载数265
191.63 KB下载数245
143.91 KB下载数1148
183.71 KB下载数642
644.84 KB下载数2756
相关文章
发现更多好内容- Java 如何获取某个接口的实现类?(Java怎么获取某个接口的实现类)
- Java中如何正确使用 collections.shuffle 方法?(Java中collections.shuffle怎么使用)
- Java Swing 中常用的布局有哪些?(java swing常用布局有哪些)
- 如何通过 Java Reflection 获取泛型信息?(java reflection如何获取泛型信息)
- 如何自定义 Java 泛型通配符?(java泛型通配符怎么自定义)
- Java Spring 注解与 XML 配置的差异究竟有哪些?(java spring注解与XML配置的区别是什么)
- Java 动态线程池对性能究竟有哪些影响呢?(Java动态线程池对性能的影响)
- 在 Java 中,Guava 究竟有哪些作用呢?(java中guava的作用是什么)
- 软考高项证书能个税抵扣吗?软考高项证书个税啥时候填报?
- 在 JavaScript 中,offsetWidth 的作用究竟是什么?(javascript中offsetwidth作用是什么)