java - 为什么使用 ArrayList 循环创建 ImageView 会导致内存错误?

标签 java android

我正在开发一个 Android 应用程序,我已经到达应用程序的一部分,我需要获取 ArrayList 并为 ArrayList 中的每个字符串创建一个 ImageView。这些将显示在布局的底部并水平滚动。

我为此使用的代码是:

ArrayList<String> selectedUser = userInformation.getUserArrayList();
LinearLayout holderGUI = findViewById(R.id.holder);
Integer i = 0;
ImageView newImg;
do {
    newImg = new ImageView(this);
    Integer id = getResources().getIdentifier(selectedUser.get(i),"drawable",getPackageName());
    newImg.setImageResource(id);
    newImg.setContentDescription(selectedUser.get(i));
    newImg.setAdjustViewBounds(true);
    newImg.setScaleType(ImageView.ScaleType.FIT_CENTER);
    holderGUI.addView(newImg);
    i++;
} while (i < selectedUser.size());

此代码工作正常,因为应用程序上的每个图像文件都与 ArrayList 中可能的字符串匹配。但是,在应用程序因内存分配错误而崩溃之前,此循环仅迭代三次。我尝试将循环中的代码块粘贴五次,以确保循环没有问题,但我得到了相同的结果。

是否有更有效的方法来做到这一点,或者我是否做错了什么?任何帮助将不胜感激。

最佳答案

在将字符串转换为图像时,如果字符串大小很大,则会导致 OutOfMemoryError 并抛出异常,因此您需要处理它。

android:largeHeap="true"
android:hardwareAccelerated="false"

在 list 应用程序标记中添加以上行。

boolean isOutOfMemory = false;

try{
    // Your Code here.
    }catch (OutOfMemoryError ex) {
        System.gc();                // clean up largeVar data
        isOutOfMemory = true;       // flag available for use
    }

将代码添加到 try catch block 中。 我希望这对您有用。

关于java - 为什么使用 ArrayList 循环创建 ImageView 会导致内存错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50421627/

相关文章:

java - 带有 python 后端的 Android 应用程序

android - putExtra 覆盖其他 putExtra

android - LifecycleRegistry 实例何时开始监听 LifecycleOwner 的生命周期变化?

java - 子字符串 : get index of "or" occurrence in string

java - javax.validation.ConstraintValidator 中的 Guice 多重绑定(bind)注入(inject)

java - GPS 设置为开启且应用程序在首次启动时崩溃

ANdroid - 使用 apktool 编辑后运行 APK 文件得到错误 : [INSTALL_PARSE_FAILED_NO_CERTIFICATES]

android - 获取 OnItemClick Listview 上项目的值

java - 在 Android SQLite 表中返回 Count(*)

java - 访问测试包中的静态变量