ImageCache 大型圖片
停止自動增加 ImageCache 的 maxByteSize 以容納大型圖片。
摘要
#ImageCache 的 maxByteSize 現在不會再自動變大來容納大型圖片。
背景說明
#
過去,當將圖片載入 ImageCache,且該圖片的位元組大小超過 ImageCache 的 maxByteSize 時,
Flutter 會永久增加 maxByteSize 的數值以容納這些圖片。
這樣的邏輯有時會導致 maxByteSize 數值膨脹,讓在記憶體有限的系統上運作變得更加困難。
變更說明
#以下「變更前」與「變更後」的偽程式碼,展示了對 ImageCache 演算法所做的調整:
// 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();
}
}
// 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值。 -
繼承(subclass)
ImageCache,實作你想要的邏輯,並建立一個新的綁定(binding)來提供你自訂的ImageCache子類別(詳見image_cache.dart原始碼)。
時程
#舊的演算法已不再支援。
合併於版本:1.16.3
穩定版釋出:1.17
參考資料
#API 文件:
相關議題:
相關 PR:
其他:
Unless stated otherwise, the documentation on this site reflects Flutter 3.44.0. Page last updated on 2026-06-14. View source or report an issue.