我相信不少人對Fresco
這個優秀的第三方網絡圖片處理框架不陌生,不管從使用仍是配置而言都是很人性化的簡單,今天要講述的是我遇到的關於緩存清理的事情。程序員
當咱們手動退出整個app的時候,發現以前加載過的圖片不會出現從新加載的狀況,說明這種狀況下,緩存依舊還在。可是當咱們經過手機的後臺關閉app的時候,就會出現從新加載,緩存也沒了。這個是咱們人爲測出來的,大家也能夠試試,這是Fresco自身的一個清理機制。緩存
用過這個框架的人不少,可是真的去計算他的緩存了多少的人,貌似並很少,我也是百度了無數,然而並無找到答案,我一度覺得也許是他封裝處理的太深了,後來去看源碼,準備作最後的策略,找到他的緩存文件夾的目錄,而後計算文件夾的大小,這也是不少第三方網絡圖片加載計算緩存的一個套路方式,這個方法可行,可是麻煩了點,最終我在google上一個老外的帖子裏面,看到了方法,你們能夠看看網絡
private void showCacheSize(){ ivClean.setVisibility(View.INVISIBLE); tvCacheSize.setVisibility(View.VISIBLE); long cacheSize = Fresco.getImagePipelineFactory().getMainDiskStorageCache().getSize(); if(cacheSize<=0){ tvCacheSize.setText("0.00B"); }else{ float cacheSizeTemp1 = CommUtil.changToTwoDecimal(Math.round(cacheSize / 1024)); float cacheSizeTemp2 = CommUtil.changToTwoDecimal(Math.round((cacheSize/1024)/1024)); if(cacheSizeTemp1<1){ tvCacheSize.setText(cacheSize+"B"); }else if(((cacheSizeTemp1>=1)&&(cacheSizeTemp2<1))){ tvCacheSize.setText(cacheSizeTemp1+"KB"); }else if(cacheSizeTemp2>=1){ tvCacheSize.setText(cacheSizeTemp2+"MB"); } } }
這個顯示方法是我本身寫,你們只要看到核心的那句app
long cacheSize =Fresco.getImagePipelineFactory().getMainDiskStorageCache().getSize();
這是最簡單的方式了沒有之一,這是顯示的部分,讓咱們再看看如何清理框架
通常來講咱們都不太須要手動去清理,由於Fresco自己就帶有自我清理的機制,詳情看上面的清理時機,可是當咱們的app須要一個清理緩存的功能的需求的時候,一言不合就去找方法,很欣慰咱們仍是找到了post
case id.tvCleanCache: ImagePipeline imagePipeline = Fresco.getImagePipeline(); imagePipeline.clearCaches(); ivClean.setVisibility(View.VISIBLE); tvCacheSize.setVisibility(View.INVISIBLE); new Handler().postDelayed(new Runnable() { public void run() { showCacheSize(); } }, 2000); break;
由於咱們須要一個表示在清理的過程動畫,清理緩存的關鍵代碼就是學習
ImagePipeline imagePipeline = Fresco.getImagePipeline(); imagePipeline.clearCaches();
這樣就清理了,你會發現以前的加載的圖片又會從新加載了,成功了!動畫
實踐纔是最好的學習方式,本篇文章不難,只是找尋答案的過程很重要,是一個程序員自我完善的一個學習過程,但願能help到有須要的朋友,?,byegoogle