我正在尝试创建一个显示两个ImageButtons的片段的应用程序。使用以下代码通过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文档中的“有效地加载大位图”教程,而该方法并不是我要尝试做的。我只是试图从“ @ drawable /”加载图像作为我的ImageButtons的背景。任何帮助,将不胜感激!

(PS:当我将android:background的“ @ drawable / image”更改为“ #ffffff”时,它可以工作。因此,我确定它与这两个图像有关。)

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

最佳答案

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

另外,将RAM增加到4GB将不起作用-整个设备没有4GB。这些是电话,而不是计算机(地狱计算机4年前没有)。

09-10 03:41
查看更多