Android Studio Fatal Exception: java.lang.OutOfMemoryError: Failed to allocate memory

Android Studio Fatal Exception: java.lang.OutOfMemoryError: Failed to allocate memory

我正在尝试创建一个包含显示两个 ImageButton 的片段的应用程序。图片通过 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 图片。

当我 运行 应用程序并启动此片段时,出现以下错误(简称:)

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 文档中的 "Loading Large Bitmaps Efficiently" 教程,其中的方法不是我想要做的。我只是想从“@drawable/”加载图像作为我的 ImageButtons 的背景。如有任何帮助,我们将不胜感激!

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

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

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

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