關於Fresco的緩存清理的那些事

前言

我相信不少人對Fresco這個優秀的第三方網絡圖片處理框架不陌生,不管從使用仍是配置而言都是很人性化的簡單,今天要講述的是我遇到的關於緩存清理的事情。程序員

正文

Fresco自身的緩存清理時機

當咱們手動退出整個app的時候,發現以前加載過的圖片不會出現從新加載的狀況,說明這種狀況下,緩存依舊還在。可是當咱們經過手機的後臺關閉app的時候,就會出現從新加載,緩存也沒了。這個是咱們人爲測出來的,大家也能夠試試,這是Fresco自身的一個清理機制。緩存

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的緩存如何清理

通常來講咱們都不太須要手動去清理,由於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

相關文章
相關標籤/搜索