ViewFlipper:位图大小超过VM预算

时间:2011-05-12 08:52:38

标签: android bitmap out-of-memory viewflipper

我正在使用ViewFlipper来显示db的一些图像。 我将blob值带到ArrayList,然后将每个字节数组转换为位图。

然后我将这些位图设置为ViewFlipper的每个Imageview。 如果图像数量低于10,那么它工作正常。但如果它超过10,那么它突然发现了一个异常: OutOfMemoryException:位图大小超过VM预算。

当我使用BitmapFactory.Options的inSampleSize时,它工作正常。但我想显示具有实际高度和宽度的图像。我怎么能毫无例外地做到这一点?

我的代码是:

ViewFlipper vfImage    = (ViewFlipper)findViewById(R.id.vfImage);
for(Photos objPhotos :arPhotos)
 {
     byte[] btImages = null;   
     Bitmap bitmapImage = null;
     btImages = objPhotos.getImage();
     ImageView imgPhoto= new ImageView(this);
     bitmapImage    = BitmapFactory.decodeByteArray(btImages, 0, btImages.length);
     imgPhoto.setImageBitmap(bitmapImage);
     vfImage.addView(imgPhoto);
}
vfImage.startFlipping();

请帮帮我.. 谢谢......

2 个答案:

答案 0 :(得分:0)

您应该考虑卸载当前未显示的位图,以便仅在内存中保留当前屏幕上的位图。祝你好运!

答案 1 :(得分:0)

完成位图的使用后,请尝试将其设为null,

 Bitmap bitmapImage = null; 

尝试在for循环的最后一行添加上面的行。这意味着每次将位图设为null时,都会减少位图捕获的内存。也尝试提供

bitmapImage.recycle(); 

这将回收位图并为您提供可用内存。

Also you can refer to my question here