查看、清除缓存功能实现(默认diskCache目录)
计算缓存大小
- 首先确保你使用的glide 配置中已经开启了diskCache
public static void setImage(Context context, String url, ImageView view) {
Glide.with(context)
.load(url)
.asBitmap()
.centerCrop()
.diskCacheStrategy(DiskCacheStrategy.ALL)
.placeholder(R.drawable.ic_launcher)
.error(R.mipmap.ic_launcher)
.into(view)
}
- 计算缓存大小(下面是从连接中copy的大神的异步计算方法)
class GetSizeTask extends AsyncTask<File, Long, Long> {
private final TextView resultView;
public GetSizeTask(TextView resultView) { this.resultView = resultView; }
@Override protected void onPreExecute() { resultView.setText("Calculating..."); }
@Override protected void onProgressUpdate(Long... values) { }
@Override protected Long doInBackground(File... dirs) {
try {
long totalSize = 0;
for (File dir : dirs) {
publishProgress(totalSize);
totalSize += calculateSize(dir);
}
return totalSize;
} catch (RuntimeException ex) {
final String message = String.format("Cannot get size of %s: %s", Arrays.toString(dirs), ex);
new Handler(Looper.getMainLooper()).post(new Runnable() {
@Override public void run() {
resultView.setText("error");
Toast.makeText(resultView.getContext(), message, Toast.LENGTH_LONG).show();
}
});
}
}
@Override protected void onPostExecute(Long size) {
String sizeText = android.text.format.Formatter.formatFileSize(resultView.getContext(), size);
resultView.setText(sizeText);
}
private static long calculateSize(File dir) {
if (dir == null) return 0;
if (!dir.isDirectory()) return dir.length();
long result = 0;
File[] children = dir.listFiles();
if (children != null)
for (File child : children)
result += calculateSize(child);
return result;
}
}
- 计算方法的调用 计算结果显示到指定的cacheSizeTextView中
new GetSizeTask(cacheSizeTextView).execute(new File(context.getCacheDir(), DiskCache.Factory.DEFAULT_DISK_CACHE_DIR))
new Thread(new Runnable() {
@Override
public void run() {
try {
Thread.sleep(100);
Glide.get(getContext()).clearDiskCache();
handler.sendEmptyMessage(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}).start();