我正在尝试创建一个带有显示两个 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/