【问题标题】:Android OutOfMemoryError while using multiple images使用多个图像时出现Android OutOfMemoryError
【发布时间】:2012-03-28 13:04:16
【问题描述】:

在我的应用程序中,我有 3 个包含多个高分辨率图像的屏幕。屏幕中使用的图像数量约为 70-75。我已经编写了代码以使用扩展 BaseAdapter 的适配器类在网格布局中添加图像,在 getView() 方法中我编写了代码,

adapter = new ImageAdapter(this);
gridview.setAdapter(adapter);

int x = (int)(width/5.1f);
imageView.setId(position);
imageView.setLayoutParams(new GridView.LayoutParams(x,x));
imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
imageView.setPadding(4, 20, 4, 20);

但是在加载这个屏幕时,它显示了很多内存问题,并且在 logcat 中我得到了错误,

java.lang.OutOfMemoryError: bitmap size exceeds VM budget

请分享我如何编写代码来处理多个高分辨率图像的内存问题。谢谢。

【问题讨论】:

  • 70-75...什么是惊喜,嗯? ) 在此处放置 ImageAdapter 的代码
  • 你应该使用缩略图,只有解决方案......
  • 正如 Ferdau 所说,您应该生成较小尺寸的图像(缩略图)以显示为网格,并且仅在用户需要时才显示全分辨率图像(例如通过单击图像)。这将解决您的内存问题并运行得更快。
  • 是的。感谢 Ferdau 和 kai。

标签: android memory-management android-emulator android-imageview performance


【解决方案1】:

如果无法调整图像分辨率,您应该将其打开为BitmapFactory.Options().inJustDecodeBounds = true,将您的选项传递给图像(所需的调整大小),然后使用BitmapFactory.Options().inJustDecodeBounds = false 再次对其进行解码。

位图图像的实际字节大小是通过将像素数乘以分配给像素的字节数来计算的。 ARGB_8888(推荐)为每个像素分配 4 个字节,因此大小为 width * height * 4 Bytes

有关更多详细信息,请阅读 Android 的 Loading Large Bitmaps Efficiently 课程。这个post 也应该有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多