ImageCache 大图片
概述
#ImageCache
的 maxByteSize
不再自动增大以适应大图片。
背景
#以前,当加载到 ImageCache
中的图片字节大小超过 ImageCache
的 maxByteSize
时,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
可能会因新逻辑而出现抖动,而这在以前是不会发生的。可以通过以下方法之一来解决此问题
- 增加
ImageCache.maxByteSize
值以适应更大的图片。 - 调整您的图片加载逻辑,以确保图片能很好地适应您选择的
ImageCache.maxByteSize
值。 - 继承
ImageCache
,实现您想要的逻辑,并创建一个新的绑定来提供您的ImageCache
子类(请参阅image_cache.dart
源代码)。
时间线
#旧算法不再受支持。
发布版本: 1.16.3
稳定版本: 1.17
参考资料
#API 文档
相关议题
相关 PR
其他