android 自动清理缓存图片吗,Android中Glide获取缓存大小并清除缓存图片

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

发布时间:2020-09-02 22:48:47

来源:脚本之家

阅读:490

作者:Trojx

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

}

}

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

b06279c340cdfdfb71f70ee3bac9eb69.png

1de539db6a4e6e9f134775d11e90f46f.png

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值