Android java.lang.OutOfMemoryError:无法分配756946956字节的分配,该分配包含16777216个可用字节和433MB的内存

Android java.lang.OutOfMemoryError:无法分配756946956字节的分配,该分配包含16777216个可用字节和433MB的内存,android,android-bitmap,Android,Android Bitmap,每次启动活动时,我都要更改活动布局的背景图像。因此,在onResume()中,我随机设置布局的背景图像,如下所示: @Override public void onResume(){ super.onResume(); Random r = new Random(); int randNumber = r.nextInt(homeBackgroundImage.length); mBackgroundLayout.setBackground(ResourcesCo

每次启动活动时,我都要更改活动布局的背景图像。因此,在
onResume()
中,我随机设置布局的背景图像,如下所示:

@Override
public void onResume(){
    super.onResume();
    Random r = new Random();
    int randNumber = r.nextInt(homeBackgroundImage.length);
    mBackgroundLayout.setBackground(ResourcesCompat.getDrawable(getResources(), homeBackgroundImage[randNumber], null));
}
但是,我在以下几行遇到了一个例外:

mBackgroundLayout.setBackground(ResourcesCompat.getDrawable(getResources(), homeBackgroundImage[randNumber], null));
这是logcat输出:

java.lang.OutOfMemoryError: Failed to allocate a 756946956 byte allocation with 16777216 free bytes and 433MB until OOM
                                                                        at dalvik.system.VMRuntime.newNonMovableArray(Native Method)
                                                                        at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method)
                                                                        at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:609)
                                                                        at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:444)
                                                                        at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:1080)
                                                                        at android.content.res.Resources.loadDrawableForCookie(Resources.java:2635)
                                                                        at android.content.res.Resources.loadDrawable(Resources.java:2540)
                                                                        at android.content.res.Resources.getDrawable(Resources.java:806)
                                                                        at android.support.v4.content.res.ResourcesCompatApi21.getDrawable(ResourcesCompatApi21.java:27)
                                                                        at android.support.v4.content.res.ResourcesCompat.getDrawable(ResourcesCompat.java:60)
                                                                        at in.avara.app.avaravrplayer.Activity.MainActivity.onResume(MainActivity.java:167)
                                                                        at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1258)
                                                                        at android.app.Activity.performResume(Activity.java:6327)
                                                                        at android.app.ActivityThread.performResumeActivity(ActivityThread.java:3092)
                                                                        at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:3134)
                                                                        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2481)
                                                                        at android.app.ActivityThread.-wrap11(ActivityThread.java)
                                                                        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)
                                                                        at android.os.Handler.dispatchMessage(Handler.java:102)
                                                                        at android.os.Looper.loop(Looper.java:148)
                                                                        at android.app.ActivityThread.main(ActivityThread.java:5417)
                                                                        at java.lang.reflect.Method.invoke(Native Method)
                                                                        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
                                                                        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
有人,请建议我什么是优化和最好的方式来改变背景图像的布局随机在每次发射

注意:我已经尝试添加了
android:hardwareAccelerated=“false”
android:largeHeap=“true”
。但是,对我来说,它不起作用


提前谢谢

您正试图分配756946956字节~=721MB。这太大了

此外,756946956字节相当于13756 x 13756像素图像。这是远远大于任何Android屏幕

您需要识别出现故障的图像并显著降低其分辨率


如果将此图像放入
res/drawable/
,请记住
res/drawable/
res/drawable mdpi/
的同义词。当您在更高的屏幕密度(例如,
xhdpi
)上使用可绘制图像时,您的图像将进行上采样。您可能应该将该drawable移出
res/drawable/
,并将其移动到所需密度的特定密度目录中(例如,
res/drawable xhdpi/
),或进入
res/drawable nodpi/
以禁用此基于密度的重采样。

尝试将图像从res/drawable/移动到res/drawable/drawable nodpi。若问题仍然存在,请在应用程序下的清单中放入android:largeHeap=“true”。

您的图像大小是多少?您是否为每个设备分辨率创建了映像?您正在尝试在内存中分配756MB:)