我需要知道在fresco缓存中磁盘的缓存版本会持续多长时间?
答案 0 :(得分:3)
正如http://frescolib.org/docs/caching.html#trimming-the-caches所写:
配置图像管道时,可以设置最大大小 每个缓存。但有时你可能想去 低于那个。例如,您的应用程序可能有缓存 其他类型的数据,可能需要更多的空间,挤满了弗雷斯科。 或者您可能正在检查整个设备是否正在运行 超出存储空间。
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.MB 或 10 ByteConstants.MB 或 2 ByteConstants.MB ) - Fresco将删除旧记录并写入新记录(图像)。 也许Fresco使用this method。