所以我有一個懶惰的圖像加載器爲我的ListView
。我也使用this tutorial進行更好的內存管理,並且SoftReference
位圖圖像存儲在我的ArrayList
中。java.lang.OutOfMemoryError:位圖大小超過VM預算
我的ListView
工程從數據庫加載8個圖像,然後一旦用戶滾動到底部,它加載另一個8等等等等。當大約35個圖像或更少,但更多和我的應用程序沒有問題強制關閉OutOfMemoryError
。
,我不能理解的是我有一個嘗試catch在我的代碼的東西:
try
{
BitmapFactory.Options o = new BitmapFactory.Options();
o.inJustDecodeBounds = true;
BitmapFactory.decodeByteArray(image, 0, image.length, o);
//Find the correct scale value. It should be the power of 2.
int width_tmp = o.outWidth, height_tmp = o.outHeight;
int scale = 1;
while(true)
{
if(width_tmp/2 < imageWidth || height_tmp/2 < imageHeight)
{
break;
}
width_tmp/=2;
height_tmp/=2;
scale++;
}
//Decode with inSampleSize
BitmapFactory.Options o2 = new BitmapFactory.Options();
o2.inSampleSize = scale;
bitmapImage = BitmapFactory.decodeByteArray(image, 0, image.length, o2);
}
catch (Exception e)
{
e.printStackTrace();
}
但try catch塊未捕獲的OutOfMemory
例外,從我瞭解的SoftReference
位圖圖像應用程序在內存不足時會被清除,從而停止拋出異常。
我在這裏做錯了什麼?
啊,我的壞......根本不知道。有什麼我可以做,以防止它發生?我完全被卡住了。 – mlevit 2010-10-18 05:11:26
如果有辦法解決問題,或者如果想通過例如在單獨的過程中開始新活動來告訴用戶,則捕獲OutOfMemoryError是非常有意義的。 – arberg 2010-12-07 12:36:31