高分辨率位图导致OutOfMemoryError异常,已设置largeHeap = true

时间:2018-12-18 11:30:05

标签: android bitmap runtime-error out-of-memory

我已经尝试过了

<application
    android:allowBackup="true"
    android:hardwareAccelerated="false"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:largeHeap="true"
    android:roundIcon="@mipmap/ic_launcher_round"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">

仍然出现以下错误:

java.lang.OutOfMemoryError: Failed to allocate a 552960012 byte allocation with 16777216 free bytes and 262MB until OOM
    at dalvik.system.VMRuntime.newNonMovableArray(Native Method)

我正在使用gridView并将适配器中包含可绘制对象的resourceId的整数数组,但是可绘制数组中的一些高分辨率图像导致了此问题。

4 个答案:

答案 0 :(得分:0)

尝试在android {...}的build.gradle(Module:app)中添加以下代码,这将对您有所帮助,否则在图像加载时会降低质量。

dexOptions {
    javaMaxHeapSize "2g"
}

答案 1 :(得分:0)

将图像缩小到您的可绘制文件夹中。决定可绘制分辨率,然后再将其放入可绘制文件夹。也是这里的在线站点,您可以在不降低图像分辨率的情况下减小图像尺寸。 Link1Link2

答案 2 :(得分:0)

@Hafeezulhaq在build.gradle(Module:app)文件中,位于其中的Gradle Scripts部分中,您可以将上面提到的代码放在文件的android {...}部分下。 enter image description here

答案 3 :(得分:0)

您必须将可绘制图像的高分辨率转换为:drawable-xxhdpi。 并在android:largeHeap="true"上添加androidManifest.xml

我已经使用此方法解决了内存不足的问题