浅谈Glide缓存的大小以及清除缓存

           在目前很多图片加载框架的实现中,我们选择了Glide就需要对其有一个深度的了解。在看完别的大神的代码和源码之后,有了以下的感想,给大家提供一个Glide的缓存的工具类。

在开始书写工具类之前,我们应该使用目前版本最高的Glide依赖
compile 'com.github.bumptech.glide:glide:3.7.0'
添加如上依赖之后,新建一个工具类,具体代码如下:

public class GlideHuanCun{


private static GlideHuanCun inst;

public static GlideHuanCun getInstance() {
        if (inst == null) {
        inst = new GlideHuanCun();
        }
        return inst;
        }

/**
 * 清除图片磁盘缓存
 */
public void clearImageDiskCache(final 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";
        }
        }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值