• Glide清除缓存


    Glide是谷歌推荐的一款加载图片的第三方框架,对内存优化更好,更省资源,他的众多好处,我就不一一描述了,有兴趣的朋友可以百度一下,介绍的还是挺详细的。

    今天主要给大家介绍一下关于怎么获取Glide的图片缓存和清除图片缓存,其实很简单,下面是写的一个工具类,简单易懂,便捷好用!

    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 
     */
    
    
    public class GlideCacheUtil {
        private static GlideCacheUtil inst;
    
        public static GlideCacheUtil getInstance() {
            if (inst == null) {
                inst = new GlideCacheUtil();
            }
            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";
        }
    }
  • 相关阅读:
    BZOJ4036 HAOI2015按位或(概率期望+容斥原理)
    洛谷p2661信息传递题解
    洛谷P1434滑雪题解及记忆化搜索的基本步骤
    二分图最大匹配
    线段树

    图论基本算法
    并查集
    RMQ--ST表
    矩阵快速幂和矩阵乘法
  • 原文地址:https://www.cnblogs.com/zhujiabin/p/8358428.html
Copyright © 2020-2023  润新知