我运行应用程序时出现Android Studio内存不足错误

时间:2018-09-01 15:11:13

标签: android android-drawable logcat

当我在物理设备上运行应用程序时 每次应用程序崩溃。 LogCat显示“内存不足,无法分配74649612字节分配,其中包含16768392可用字节和49MB,直到OOM为止”。

我正在使用的设备是小米RedMi note 4 3GB RAM Android 7.0版 处理器Qualcomm Snapdragon 625

这是LogCat消息

java.lang.OutOfMemoryError: Failed to allocate a 74649612 byte allocation with 16768392 free bytes and 49MB until OOM
    at dalvik.system.VMRuntime.newNonMovableArray(Native Method)
    at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method)
    at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:624)
    at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:457)
    at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:1152)
    at android.content.res.ResourcesImpl.createFromResourceStream(ResourcesImpl.java:1272)
    at android.content.res.ResourcesImpl.loadDrawableForCookie(ResourcesImpl.java:743)
    at android.content.res.ResourcesImpl.loadDrawable(ResourcesImpl.java:585)
    at android.content.res.MiuiResourcesImpl.loadDrawable(MiuiResourcesImpl.java:308)
    at android.content.res.Resources.getDrawable(Resources.java:785)
    at android.content.res.Resources.getDrawable(Resources.java:756)
    at com.suman.udit.su.MainActivity.onCreate(MainActivity.java:52)
    at android.app.Activity.performCreate(Activity.java:6852)
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1119)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2700)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2808)
    at android.app.ActivityThread.-wrap12(ActivityThread.java)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1541)
    at android.os.Handler.dispatchMessage(Handler.java:102)
    at android.os.Looper.loop(Looper.java:165)
    at android.app.ActivityThread.main(ActivityThread.java:6365)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:883)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:773)

2 个答案:

答案 0 :(得分:3)

您试图在MainActivity.java:52加载的Drawable(也许是图片)看起来太大了。您也可以尝试将其放在drawable-nodpi文件夹中,以使系统不会在加载时重新缩放它。

答案 1 :(得分:1)

OutOfMemoryError是android中最常见的问题,尤其是在处理位图时。当由于内存不足而无法分配对象时,Java虚拟机(JVM)会引发此错误,并且垃圾回收器无法释放一些空间。

如Aleksey所述,您可以在清单文件android:hardwareAccelerated="false"android:largeHeap="true"中添加以下实体,该实体适用于某些环境。

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

您应该明确阅读一些Android Developers概念,特别是在这里:Displaying Bitmaps Efficiently

阅读所有5个主题,然后再次重写代码。如果仍然无法正常工作,我们将很高兴看到您对本教程资料做错了。

对于SOF中的此类错误,这里有一些可能的答案

Android: BitmapFactory.decodeStream() out of memory with a 400KB file with 2MB free heap

How to solve java.lang.OutOfMemoryError trouble in Android

Android : java.lang.OutOfMemoryError

java.lang.OutOfMemoryError

Solution for OutOfMemoryError: bitmap size exceeds VM budget