Glide獲取緩存大小并清除緩存圖片

清除Glide緩存

Glide自帶清除緩存的功能,分別對(duì)應(yīng)Glide.get(context).clearDiskCache();(清除磁盤緩存)與Glide.get(context).clearMemory();(清除內(nèi)存緩存)兩個(gè)方法.其中clearDiskCache()方法必須運(yùn)行在子線程,clearMemory()方法必須運(yùn)行在主線程,這是這兩個(gè)方法所強(qiáng)制要求的,詳見源碼.

獲取Glide緩存空間大小

這個(gè)網(wǎng)上也有過一些介紹,但是給出的實(shí)現(xiàn)代碼存在一些問題,我這里做了一定的修改.一下方法適合在Glide為默認(rèn)的緩存目錄的情況,不論是內(nèi)部存儲(chǔ)空間還是外部.因?yàn)槲覀兛梢酝ㄟ^InternalCacheDiskCacheFactory.DEFAULT_DISK_CACHE_DIRExternalCacheDiskCacheFactory.DEFAULT_DISK_CACHE_DIR獲取到位于內(nèi)部與外部存儲(chǔ)的緩存文件夾的文件夾名,并通過context.getCacheDir()context.getExternalCacheDir()獲取內(nèi)部與外部存儲(chǔ)的路徑.進(jìn)而可以通過遍歷文件夾內(nèi)的文件進(jìn)行緩存文件大小求和與全部清除.以下工具類在其他的文章中有前輩寫過,但是存在一些已知的問題,這里做了一些修改.

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();
}
}

/**
* 清除圖片內(nèi)存緩存
*/
public void clearImageMemoryCache(Context context) {
try {
if (Looper.myLooper() == Looper.getMainLooper()) { //只能在主線程執(zhí)行
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 "";
}

/**
* 獲取指定文件夾內(nèi)所有文件大小的和
*
* @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";
}
}

通過它就能實(shí)現(xiàn)一個(gè)清除圖片緩存的功能,在應(yīng)用中實(shí)現(xiàn)的效果如下:
http://cdn.trojx.me/blog_pic/glide_cache_clear_before.png
http://cdn.trojx.me/blog_pic/glide_cache_clear_after.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市瓶逃,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌严沥,老刑警劉巖舀瓢,帶你破解...
    沈念sama閱讀 222,252評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件滞乙,死亡現(xiàn)場(chǎng)離奇詭異债蓝,居然都是意外死亡壳鹤,警方通過查閱死者的電腦和手機(jī)盛龄,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,886評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門饰迹,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人余舶,你說我怎么就攤上這事啊鸭。” “怎么了匿值?”我有些...
    開封第一講書人閱讀 168,814評(píng)論 0 361
  • 文/不壞的土叔 我叫張陵赠制,是天一觀的道長。 經(jīng)常有香客問我,道長钟些,這世上最難降的妖魔是什么烟号? 我笑而不...
    開封第一講書人閱讀 59,869評(píng)論 1 299
  • 正文 為了忘掉前任,我火速辦了婚禮政恍,結(jié)果婚禮上汪拥,老公的妹妹穿的比我還像新娘。我一直安慰自己篙耗,他們只是感情好迫筑,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,888評(píng)論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著宗弯,像睡著了一般脯燃。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上蒙保,一...
    開封第一講書人閱讀 52,475評(píng)論 1 312
  • 那天辕棚,我揣著相機(jī)與錄音,去河邊找鬼追他。 笑死坟募,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的邑狸。 我是一名探鬼主播懈糯,決...
    沈念sama閱讀 41,010評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼单雾!你這毒婦竟也來了赚哗?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,924評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤硅堆,失蹤者是張志新(化名)和其女友劉穎屿储,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體渐逃,經(jīng)...
    沈念sama閱讀 46,469評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡够掠,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,552評(píng)論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了茄菊。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片疯潭。...
    茶點(diǎn)故事閱讀 40,680評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖面殖,靈堂內(nèi)的尸體忽然破棺而出竖哩,到底是詐尸還是另有隱情,我是刑警寧澤脊僚,帶...
    沈念sama閱讀 36,362評(píng)論 5 351
  • 正文 年R本政府宣布相叁,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏增淹。R本人自食惡果不足惜椿访,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,037評(píng)論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望虑润。 院中可真熱鬧赎离,春花似錦、人聲如沸端辱。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,519評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽舞蔽。三九已至荣病,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間渗柿,已是汗流浹背个盆。 一陣腳步聲響...
    開封第一講書人閱讀 33,621評(píng)論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留朵栖,地道東北人颊亮。 一個(gè)月前我還...
    沈念sama閱讀 49,099評(píng)論 3 378
  • 正文 我出身青樓,卻偏偏與公主長得像陨溅,于是被迫代替她去往敵國和親终惑。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,691評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容