Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/202.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android OutOfMemoryError在使用多个图像时出错_Android_Memory Management_Android Emulator_Android Imageview_Performance - Fatal编程技术网

Android OutOfMemoryError在使用多个图像时出错

Android OutOfMemoryError在使用多个图像时出错,android,memory-management,android-emulator,android-imageview,performance,Android,Memory Management,Android Emulator,Android Imageview,Performance,在我的应用程序中,我有3个屏幕,其中包含多个高分辨率图像。屏幕中使用的图像数量约为70-75。我已经编写了使用扩展BaseAdapter的适配器类在网格布局中添加图像的代码,在我编写的getView()方法中 adapter = new ImageAdapter(this); gridview.setAdapter(adapter); int x = (int)(width/5.1f); imageView.setId(position); imageView.setLayoutParams(

在我的应用程序中,我有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

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

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

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


有关更多详细信息,请阅读Android课程。这也应该有所帮助

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