java - 将图像加载到 GridView 时出现 OutOfMemoryError

标签 java android gridview out-of-memory android-imageview

我正在创建一个在 GridView 中加载图像的应用程序,但是根据我放置在数组中的图像数量,我得到了 java.lang.outofmemory 错误并且应用程序崩溃了。
我有一个 ImageAdapter,在其中加载图像,我正在按照 Androidhive 中的本教程进行操作.我的图像总共约 4.53MB,最大的一张为 1.1MB。有些图像相当小。有时,当我从我的代码中一次加载一个图像时,应用程序会运行,但当我一次加载所有图像时,它会崩溃。

answer似乎很明智,但我无法遵循我的项目设置方式。我只有一个 GridView 并在我的代码中以编程方式获取 ImageView,但它们似乎是从 xml 文件中引用的。
这是我的 getView() 方法:
@覆盖 public View getView(int position, View convertView, ViewGroup parent) { ImageView imageView = new ImageView(mContext); imageView.setImageResource(mThumbsIds[位置]); imageView.setScaleType(ImageView.ScaleType.FIT_CENTER); imageView.setLayoutParams(new GridView.LayoutParams(200, 200)); 返回 ImageView ; } 其中 mThumbsId 是整数数组,用于存储我从 @drawable 文件夹引用的图像。我需要帮助以我的项目设置方式调整图像大小,也许其他答案可以提供帮助,但我无法遵循它们的结构。
我的 xml 文件还有 gridview:

<?xml version="1.0" encoding="utf-8"?>
<GridView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/grid_view"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:numColumns="auto_fit"
android:columnWidth="150dp"
android:horizontalSpacing="5dp"
android:verticalSpacing="5dp"
android:gravity="center"
android:soundEffectsEnabled="true"
android:stretchMode="columnWidth" > 

</GridView>


感谢进阶

最佳答案

您提到的 1161x1161 像素的图像在内部转换为 Bitmap。这个位图(如果是 32 位)将占用大约 5MB(1161 x 1161 x 4 字节)的堆内存。

由于在 GridView 中使用时内存中会有多个这样的图像,因此内存不足也就不足为奇了。所以是的,您应该调整图像的大小,然后再将它们加载到GridView

阅读关于如何调整大小的问题/答案:High resolution Image - OutOfMemoryError

关于java - 将图像加载到 GridView 时出现 OutOfMemoryError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26700777/

相关文章:

java - 在我的例子中如何使用replaceFirst()来获取一系列连续的字符串?

android - 无法将内部存储中的文件添加为电子邮件附件

html - 将 GridView 移动到 div 的中心

java - 如何在 Java 中防止 403 HTTP 错误代码?

java - SpEL java.util.Properties 不起作用。 maven 汤姆猫 8

java - XSSFWorkbook 错误 - MoSTLy 缺少一些 Jar 或依赖项

java - 我想通过一个按钮重启我的 Android 平板电脑

android - 更新我的 Android 应用程序

android - setOnItemClickListener() 不适用于 gridView

asp.net - 如何在运行时计算 GridView 中的列?