java - Android Studio致命异常: java. lang.OutOfMemoryError:无法分配内存

标签 java android xml android-studio imagebutton

我正在尝试创建一个带有显示两个 ImageButtons 的 fragment 的应用程序。图像通过 xml 加载,代码如下:

<ImageButton
...
        android:id="@+id/image_button_lab"
        android:background="@drawable/lab"
.../>

<ImageButton
...
        android:id="@+id/image_button_wild"
        android:background="@drawable/wild"
.../>

第一张是实验室的照片,另一张是老虎的照片。两张图片均为 1080 x 1080 方形 .jpeg 图像。

当我运行应用程序并启动此 fragment 时,出现以下错误(缩短:)

E/AndroidRuntime: FATAL EXCEPTION: mainProcess: com.example.umutberk.test,PID: 2959
java.lang.OutOfMemoryError: Failed to allocate a 41990412 byte allocation with 4194304 
free bytes and 22MB until OOM

我尝试添加;

dexOptions 
    {
        incremental true
        javaMaxHeapSize "4g"
    }

... 到 build.gradle 文件中的 android{...} 段。

还尝试将 VD RAM 大小增加到 4GB,创建一个分配有 4GB RAM 的新 VD,还在我的 LG G4 上运行 APK,但无论如何都会崩溃。

查看了官方 Android Studio 文档中的“高效加载大位图”教程和方法,这并不是我想要做的。我只是想从“@drawable/”加载图像作为我的图像按钮的背景。任何帮助将不胜感激!

(PS:当我将 android:background 的“@drawable/image”更改为“#ffffff”时,它会起作用。所以我确信它与这两个图像有关。)

这里还有完整的错误消息:http://pastebin.com/ZiegMfpB

最佳答案

问题不在于这些特定的分配。 2 张该尺寸的图像是半合理的(半是因为 2 张这么大的图片无法同时显示在屏幕上,所以为什么不根据需要一次加载一张)。问题是你所有的分配加起来太多了。查找泄漏或您保留的不需要保留的内存,尤其是位图。我会使用堆转储来查看某个对象是否太多。

此外,将 RAM 增加到 4GB 也行不通——整个设备没有 4GB。这些是手机,不是电脑(4 年前电脑还没有这样的东西)。

关于java - Android Studio致命异常: java. lang.OutOfMemoryError:无法分配内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35563370/

相关文章:

java - Java中从非捕获组中提取捕获组

Android数据库插入特定行

java - 无法使用 JAXB 生成枚举类

php - 如何在 PHP 中的一个元素中编写多个不同的 xml 命名空间

java - 使用 JPA 属性日历的日期格式问题

java - 同步访问 int 数组中的特定索引

java - 如何使用带有 JSON 数据的 RoboSpice Google Http Java 客户端模块上传文件

android - 如何在 Play 商店上传拆分应用程序二进制文件

android - 如何将 ITelephony.aidl 添加到 Eclipse?

xml - 计算 XML 文档中特定节点的出现频率