0

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

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 

请分享我怎么能写代码来处理多个高清晰度的图像记忆的问题。谢谢。

+1

70-75 ...什么是惊喜,是吧? )在这里把你的ImageAdapter的代码 – 2012-03-28 13:08:01

+1

你应该使用缩略图,只有解决方案... – Ferdau 2012-03-28 13:18:34

+0

检查此链接也 http://stackoverflow.com/questions/4611822/java-lang-outofmemoryerror-bitmap-size-exceeds-vm - 预算 – user1298288 2012-03-28 13:39:30

回答

0

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

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

欲了解更多详情,请阅读Android的Loading Large Bitmaps Efficiently课程。这post也应该有所帮助。