4

我需要知道 URI 的缓存版本在 fresco 缓存中的磁盘上存在多长时间?

4

1 回答 1

4

正如它写在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) - Fresco 将删除旧记录并写入新记录(图像)。也许 Fresco 使用这种方法

于 2015-12-09T13:43:21.627 回答