2015-09-25 57 views

回答

2

由於它在http://frescolib.org/docs/caching.html#trimming-the-caches寫:

在配置圖像流水線,您可以設置每個緩存的 的最大尺寸。但有時候你可能想要比 低。例如,您的應用程序可能需要緩存可能需要更多空間並擠出Fresco的其他類型的數據。 或者您可能正在檢查整個設備是否在存儲空間中運行了 。

Fresco的高速緩存實現了DiskTrimmable或MemoryTrimmable 接口。這些是你的應用程序可以告訴他們執行緊急驅逐的鉤子。

然後,您的應用程序可以使用實現DiskTrimmableRegistry和MemoryTrimmableRegistry 接口的對象 配置管道。

這些對象必須保留微調列表。他們必須使用 特定於應用程序的邏輯來確定內存或磁盤空間何時必須保留 。然後他們通知可修飾物體執行其修剪。

所以,如果你不指定DiskTrimmable或MemoryTrimmable而配置您的ImagePipeline將使用默認DiskTrimmable,MemoryTrimmable。因此,在源尋找默認值後,我發現這一點:

private static DiskCacheConfig getDefaultMainDiskCacheConfig(final Context context) { 
    return DiskCacheConfig.newBuilder() 
     .setBaseDirectoryPathSupplier(
      new Supplier<File>() { 
       @Override 
       public File get() { 
       return context.getApplicationContext().getCacheDir(); 
       } 
      }) 
     .setBaseDirectoryName("image_cache") 
     .setMaxCacheSize(40 * ByteConstants.MB) 
     .setMaxCacheSizeOnLowDiskSpace(10 * ByteConstants.MB) 
     .setMaxCacheSizeOnVeryLowDiskSpace(2 * ByteConstants.MB) 
     .build(); 
    } 

所以結論是未來:當內存已滿(40 ByteConstants.MB10 ByteConstants.MB2 ByteConstants.MB) - 壁畫將刪除舊記錄並寫入新記錄(圖像)。 也許壁畫使用this method