全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

Android中Glide获取缓存大小并清除缓存图片

清除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;

/**Glide缓存工具类
* Created by Trojx on 2016/10/10 0010.
*/

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() {
@Override
public 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);
}

/**
* 获取Glide造成的缓存大小
*
* @return CacheSize
*/
public String getCacheSize(Context context) {
try {
return getFormatSize(getFolderSize(new File(context.getCacheDir() + "/"+InternalCacheDiskCacheFactory.DEFAULT_DISK_CACHE_DIR)));
} catch (Exception e) {
e.printStackTrace();
}
return "";
}

/**
* 获取指定文件夹内所有文件大小的和
*
* @param file file
* @return size
* @throws Exception
*/
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;
}

/**
* 删除指定目录下的文件,这里用于缓存的删除
*
* @param filePath filePath
* @param deleteThisPath deleteThisPath
*/
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();
}
}
}

/**
* 格式化单位
*
* @param size size
* @return size
*/
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";
}
}

通过它就能实现一个清除图片缓存的功能,在应用中实现的效果如下:


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# Android  # Glide  # 缓存  # Android异步下载图片并且缓存图片到本地DEMO详解  # Android基于SoftReference缓存图片的方法  # Android Universal ImageLoader 缓存图片  # android实现缓存图片等数据  # android中图片的三级缓存cache策略(内存/文件/网络)  # Android中Glide加载库的图片缓存配置究极指南  # android异步加载图片并缓存到本地实现方法  # Android中Glide加载图片并实现图片缓存  # Android实现缓存大图到SD卡  # 这是  # 就能  # 遍历  # 中有  # 其他的  # 我们可以  # 这两个  # 有过  # 可以通过  # 自带  # 写过  # 大家多多  # 目录下  # 只能在  # 网上  # Trojx  # public  # Created  # io  # cache 


相关文章: 制作销售网站教学视频,销售网站有哪些?  建站主机选哪种环境更利于SEO优化?  如何配置支付宝与微信支付功能?  常州企业建站如何选择最佳模板?  如何通过可视化优化提升建站效果?  北京制作网站的公司,北京铁路集团官方网站?  网站制作软件有哪些,制图软件有哪些?  网站制作难吗安全吗,做一个网站需要多久时间?  移动端手机网站制作软件,掌上时代,移动端网站的谷歌SEO该如何做?  制作门户网站的参考文献在哪,小说网站怎么建立?  全景视频制作网站有哪些,全景图怎么做成网页?  网站制作的软件有哪些,制作微信公众号除了秀米还有哪些比较好用的平台?  c# 服务器GC和工作站GC的区别和设置  公司网站制作需要多少钱,找人做公司网站需要多少钱?  杭州银行网站设计制作流程,杭州银行怎么开通认证方式?  免费制作统计图的网站有哪些,如何看待现如今年轻人买房难的情况?  创业网站制作流程,创业网站可靠吗?  建站之星官网登录失败?如何快速解决?  大连企业网站制作公司,大连2025企业社保缴费网上缴费流程?  利用JavaScript实现拖拽改变元素大小  威客平台建站流程解析:高效搭建教程与设计优化方案  如何在自有机房高效搭建专业网站?  php8.4新语法match怎么用_php8.4match表达式替代switch【方法】  如何在阿里云虚拟机上搭建网站?步骤解析与避坑指南  为什么Go需要go mod文件_Go go mod文件作用说明  东莞专业制作网站的公司,东莞大学生网的网址是什么?  建站之星ASP如何实现CMS高效搭建与安全管理?  个人摄影网站制作流程,摄影爱好者都去什么网站?  北京网页设计制作网站有哪些,继续教育自动播放怎么设置?  如何在云主机快速搭建网站站点?  如何用景安虚拟主机手机版绑定域名建站?  如何通过IIS搭建网站并配置访问权限?  打鱼网站制作软件,波克捕鱼官方号怎么注册?  建站主机空间推荐 高性价比配置与快速部署方案解析  宠物网站制作html代码,有没有专门介绍宠物如何养的网站啊?  广东企业建站网站优化与SEO营销核心策略指南  网站微信制作软件,如何制作微信链接?  手机钓鱼网站怎么制作视频,怎样拦截钓鱼网站。怎么办?  如何快速生成可下载的建站源码工具?  青浦网站制作公司有哪些,苹果官网发货地是哪里?  广州网站制作公司哪家好一点,广州欧莱雅百库网络科技有限公司官网?  ,在苏州找工作,上哪个网站比较好?  如何撰写建站申请书?关键要点有哪些?  整蛊网站制作软件,手机不停的收到各种网站的验证码短信,是手机病毒还是人为恶搞?有这种手机病毒吗?  合肥做个网站多少钱,合肥本地有没有比较靠谱的交友平台?  网站按钮制作软件,如何实现网页中按钮的自动点击?  如何通过虚拟主机空间快速建站?  C#怎么使用委托和事件 C# delegate与event编程方法  建站之星代理费用多少?最新价格详情介绍  专业商城网站制作公司有哪些,pi商城官网是哪个? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。