【问题标题】:ViewFlipper : Bitmap size exceeds VM budgetViewFlipper:位图大小超出 VM 预算
【发布时间】:2011-08-23 22:51:57
【问题描述】:

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

然后我将这些每个位图设置为 ViewFlipper 的每个 Imageview。 如果图像数量低于 10,则它工作正常。但是如果它超过 10,那么它会突然捕获一个 Exception : 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();

请帮帮我.. 谢谢...

【问题讨论】:

    标签: android bitmap out-of-memory viewflipper


    【解决方案1】:

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

    【讨论】:

    • 我们应该如何卸载图像?在调用 startFlipping() 方法之前,我们应该将所有图像添加到 ViewFlipper 中。我认为 ViewFlipper 无法删除并再次添加图像。
    • 每次翻阅 ViewFlipper 的子项并将 ImageView 的 drawable 设置为 null 除了当前显示的每个子项。抱歉,没有任何代码示例,只是想法。
    【解决方案2】:

    一旦你完成使用你的位图,试着像这样让它为空,

     Bitmap bitmapImage = null; 
    

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

    bitmapImage.recycle(); 
    

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

    Also you can refer to my question here

    【讨论】:

    • 我尝试使用 recycle() 函数并将位图对象设为空。但还是无法解决问题
    猜你喜欢
    • 2012-08-19
    • 1970-01-01
    • 1970-01-01
    • 2011-04-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多