ImageCache 大图像
摘要
#ImageCache
的 maxByteSize
不会再自动增大以适应大型图像。
上下文
#以前,当将字节大小大于 ImageCache
的 maxByteSize
的图像加载到 ImageCache
中时,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();
}
}
}
迁移指南
#在某些情况下,ImageCache
在新的逻辑下可能会出现抖动,而在之前则不会,特别是如果您加载的图像大于 cache.maxByteSize
值时。这可以通过以下方法之一解决
- 增加
ImageCache.maxByteSize
值以适应更大的图像。 - 调整您的图像加载逻辑,以确保图像完美地适合您选择的
ImageCache.maxByteSize
值。 - 子类化
ImageCache
,实现您所需的逻辑,并创建一个提供您ImageCache
子类的新的绑定(请参阅image_cache.dart
源代码)。
时间线
#旧算法不再受支持。
包含于版本:1.16.3
稳定版发布:1.17
参考文献
#API 文档
相关问题
相关 PR
其他
除非另有说明,否则本网站上的文档反映了 Flutter 的最新稳定版本。页面上次更新于 2024-04-04。 查看源代码 或 报告问题.