2015-09-25 100 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