这里有新鲜出炉的精品教程,程序狗速度看过来!
Android 是一种基于 Linux 的自由及开放源代码的操作系统,主要使用于移动设备,如智能手机和平板电脑,由 Google 公司和开放手机联盟领导及开发。尚未有统一中文名称,中国大陆地区较多人使用 "安卓" 或 "安致"。
这篇文章主要介绍了 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";
- }
- }
通过它就能实现一个清除图片缓存的功能, 在应用中实现的效果如下:
来源: http://www.phperz.com/article/17/0707/336613.html