抖动中的最大缓存大小限制

时间:2020-09-27 13:32:17

标签: flutter

我正在使用Firestore作为数据库,并使用cached_network_image在flutter应用程序(iOS和Android)中加载和缓存图像。我注意到应用程序运行一段时间(在调试模式下)后,应用程序缓存大小太大(+300 mb)。 应用程序在抖动中使用的缓存大小是否有最大限制? 有没有一种方法可以对缓存大小施加一定的限制,以便每当缓存大小达到最大限制时,都会删除最早的缓存文件?

3 个答案:

答案 0 :(得分:1)

图像缓存最多可缓存 1000 张图像最多 100 MB。这可能更多,但至少 100 MB。

答案 1 :(得分:0)

cached_network_image依赖于flutter_cache_manager

一个CacheManager,用于在以下目录的缓存目录中下载和缓存文件 该应用程序。可以更改文件保存时间的各种设置。

工作方式

默认情况下,缓存的文件存储在应用程序的临时目录中。这意味着操作系统可以随时删除文件。

有关文件的信息使用sqflite存储在数据库中。数据库的文件名是cacheManager的键,这就是为什么它必须唯一的原因。

此缓存信息包含文件有效之前的结束日期以及与http缓存控件一起使用的eTag。

方法

removeFile从缓存中删除文件。

emptyCache从缓存中删除所有文件。

示例

void _clearCache() {
    DefaultCacheManager().emptyCache();
    
  }

如果您希望能够在某个时间后删除图像,则必须实现自定义缓存,该缓存会在给定的天数后删除图像。

来自文档TL:DR

class CustomCacheManager extends BaseCacheManager {
  static const key = "customCache";

  static CustomCacheManager _instance;

  factory CustomCacheManager() {
    if (_instance == null) {
      _instance = new CustomCacheManager._();
    }
    return _instance;
  }

  CustomCacheManager._() : super(key,
      maxAgeCacheObject: Duration(days: 7),
      maxNrOfCacheObjects: 20);

  Future<String> getFilePath() async {
    var directory = await getTemporaryDirectory();
    return p.join(directory.path, key);
  }

答案 2 :(得分:0)

对于您的用例,使用extended_image来缓存图像,并使用clearDiskCachedImages方法清除缓存

// Clear the disk cache directory then return if it succeed.
///  <param name="duration">timespan to compute whether file has expired or not</param>
Future<bool> clearDiskCachedImages({Duration duration})