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。 檢視原始碼 或 回報問題。