我正在尝试创建一个显示两个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年前没有)。