概述

#

ImageCachemaxByteSize 不再自动增大以适应大图片。

背景

#

以前,当加载到 ImageCache 中的图片字节大小超过 ImageCachemaxByteSize 时,Flutter 会永久性地增加 maxByteSize 值以适应这些图片。这种逻辑有时会导致 maxByteSize 值过大,从而使在内存受限系统中的工作变得更加困难。

变更说明

#

以下“之前”和“之后”的伪代码展示了对 ImageCache 算法所做的更改

Dart
// Old logic pseudocode
void onLoadImage(Image image) {
  if (image.byteSize > _cache.maxByteSize) {
    _cache.maxByteSize = image.byteSize + 1000;
  }
  _cache.add(image);
  while (_cache.count > _cache.maxCount
      || _cache.byteSize > _cache.maxByteSize) {
    _cache.discardOldestImage();
  }
}
Dart
// New logic pseudocode
void onLoadImage(Image image) {
  if (image.byteSize < _cache.maxByteSize) {
    _cache.add(image);
    while (_cache.count > _cache.maxCount
        || _cache.byteSize > cache.maxByteSize) {
      cache.discardOldestImage();
    }
  }
}

迁移指南

#

在某些情况下,如果加载的图片大于您的 cache.maxByteSize 值,ImageCache 可能会因新逻辑而出现抖动,而这在以前是不会发生的。可以通过以下方法之一来解决此问题

  1. 增加 ImageCache.maxByteSize 值以适应更大的图片。
  2. 调整您的图片加载逻辑,以确保图片能很好地适应您选择的 ImageCache.maxByteSize 值。
  3. 继承 ImageCache,实现您想要的逻辑,并创建一个新的绑定来提供您的 ImageCache 子类(请参阅 image_cache.dart 源代码)。

时间线

#

旧算法不再受支持。

发布版本: 1.16.3
稳定版本: 1.17

参考资料

#

API 文档

相关议题

相关 PR

其他