Android:致命异常:java.lang.OutOfMemoryError

Posted

技术标签:

【中文标题】Android:致命异常:java.lang.OutOfMemoryError【英文标题】:Android: Fatal Exception: java.lang.OutOfMemoryError 【发布时间】:2017-01-19 17:08:52 【问题描述】:

我知道关于 SO 上的 OutOfMemoryError 还有一百万个其他问题。但我的情况不同。堆栈跟踪中的所有行都不是来自我的代码或我包含的库。整个堆栈跟踪由 android 的标准库组成。

我不知道应该从哪里开始调试。关于如何进一步调试它的任何想法?

Fatal Exception: java.lang.OutOfMemoryError
       at android.util.ArrayMap.allocArrays(ArrayMap.java:196)
       at android.util.ArrayMap.ensureCapacity(ArrayMap.java:307)
       at android.os.Bundle.unparcel(Bundle.java:247)
       at android.os.Bundle.getSparseParcelableArray(Bundle.java:1273)
       at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1207)
       at android.support.v4.app.FragmentManagerImpl.moveFragmentsToInvisible(FragmentManager.java:2323)
       at android.support.v4.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2136)
       at android.support.v4.app.FragmentManagerImpl.optimizeAndExecuteOps(FragmentManager.java:2092)
       at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1998)
       at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:709)
       at android.os.Handler.handleCallback(Handler.java:808)
       at android.os.Handler.dispatchMessage(Handler.java:103)
       at android.os.Looper.loop(Looper.java:193)
       at android.app.ActivityThread.main(ActivityThread.java:5292)
       at java.lang.reflect.Method.invokeNative(Method.java)
       at java.lang.reflect.Method.invoke(Method.java:515)
       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:824)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:640)
       at dalvik.system.NativeStart.main(NativeStart.java)

【问题讨论】:

您是否在应用中使用了索引大于其大小的数组? 首先在内存不足时获取堆转储。然后检查它并查看您使用内存的对象。找出哪些对象不应该仍然存在,然后修复你的代码,这样它就不会在不应该存在的时候保留引用。 还要检查您是否没有通过内部类泄漏活动或片段。 @dsh - 我在 Fabric 控制台上看到了这个崩溃(顺便说一句,他们今天刚刚被谷歌收购)。而且我无法访问发生崩溃的手机。 如何查明泄露的活动或碎片? Leak Canary 仅指向班级成员,而不是活动本身。 【参考方案1】:

android/app/src/main/AndroidManifest.xml

<application
  android:largeHeap="true"

添加 largeHeap 可能会解决它

【讨论】:

以上是关于Android:致命异常:java.lang.OutOfMemoryError的主要内容,如果未能解决你的问题,请参考以下文章

致命异常主要android

在android应用程序中出现致命异常

致命异常错误Android

android.os.Parcel.createExceptionOrNull 致命异常:java.lang.IllegalArgumentException

Android:致命异常:java.lang.OutOfMemoryError

长按 ListView 项目的 Android onCreateContextMenu 致命异常