所以我有一个懒惰的图像加载器为我的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