我的Android應用程序中有一個位圖緩存,位圖通過SoftReference引用。但是,位圖過早消失。緩存中最多可以有20個位圖,如果我加載更多,則GC開始將SoftReferences歸零。沒有SoftReferences,我可以在緩存中擁有大約110個位圖。在OutOfMemoryError發生之前SoftReference是否應該爲null?SoftReference空值過早
1
A
回答
5
沒有,寓意作品的其他方式:
這是保證Java運行時會抵消SoftReferences,如果有的話,拋出的OutOfMemoryError之前。但是,它並不能保證只有在這種情況下SoftReference纔會被取消。
0
在我的情況下,如果我從其他Activity返回,Hashmap(位圖緩存)會得到空值。 因此,我修正了我的代碼,如下面的僞代碼。
void displayImageFunction() {
if(mImageCacheMap.containsKey(key)) {
Bitmap bitmapToShow = mImageCacheMap.get(url).get();
if(bitmapToShow != null) {
//> Image was cached well
//> Set "bitmapToShow" to UI
return;
}
}
//> Read from file DB(or Web) and...
Bitmap bmp = getBitmap(imageToLoad.url);
//> put it to Hashmap again...
mImageCacheMap.put(key, new SoftReference<Bitmap>(bmp));
//> Set "bmp" to UI
}
我認爲我們應該預先爲零。 因爲我們無法知道GC什麼時候收集垃圾。 :)
相關問題
- 1. SoftReference太早收集垃圾
- 2. SoftReference的/ WeakReference的空指針
- 3. 空白項目。文件過早結束
- 4. 異常過早提早
- 5. Javascript img change聲明過早過早
- 6. 過早結束
- 7. 在Map中使用SoftReference?
- 8. 什麼的WeakReference和SoftReference的
- 9. Spring Cloud Config(Vault後端)過早提早
- 10. Forms Auth過早cookie過期
- 11. jQuery過早褪色
- 12. TransactionScope過早完成
- 13. ResultSet過早關閉
- 14. Promise.all過早解決
- 15. onActivityResult()稱爲過早
- 16. NSStream過早關閉
- 17. Ruby過早的EOF?
- 18. onScaleEnd過早收到
- 19. 過早EOF錯誤
- 20. NodeJS過早退出
- 21. UITableViewCell過早重用
- 22. NSThread過早終止
- 23. Div.scrollTop過早滾動
- 24. 過濾空值
- 25. SoftReference具有值(等於)等於的潛在用途
- 26. angularjs過濾空值
- 27. 如果Excel VBA中的空循環過早退出
- 28. RCaller Java文件過早結束aka XML文件爲空
- 29. NSMutableArray似乎過早釋放
- 30. 焦炭類過早結束
是。在Android中,SoftReference的行爲已經從發佈變爲發佈,所以假設當前行爲將持續是不明智的。預計未來的Android版本將包含一個可配置的LruCache工具類,可以幫助解決這類情況。 – fadden 2011-03-26 00:10:41