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 發生頻繁的快取失效(thrashing)的情況,而以前沒有,特別是當您載入的圖片大於您的 cache.maxByteSize 值時。可以透過以下方法之一來解決此問題:
- 增加
ImageCache.maxByteSize值以適應更大的圖片。 - 調整您的圖片載入邏輯,以確保圖片能夠很好地適應您選擇的
ImageCache.maxByteSize值。 - 子類化
ImageCache,實現您想要的邏輯,並建立一個新的繫結來提供您的ImageCache子類(請參閱image_cache.dart原始碼)。
時間線
#舊演算法不再受支援。
釋出版本: 1.16.3
穩定版本: 1.17
參考資料
#API 文件
相關議題
相關 PR
其他