【发布时间】:2013-03-01 16:18:16
【问题描述】:
我目前正在开发一个包含多个活动的 Android 应用程序。大多数情况下,该应用程序运行良好,但有时会出现Out of Memory Exception。 (通常在尝试为下一个活动加载大背景图像时)
我找不到任何明显的内存泄漏,所以我在异常发生时创建了一个堆转储(如here 所述)并尝试使用 MAT 对其进行分析。
我以前没有做过这样的事情,所以我不确定我到底应该寻找什么。我开始点击较大的字节对象,第二个似乎是属于ImageButton 的位图:
GC 根路径向我展示了一个 com.android.internal.policy.impl.PhoneWindow 实例:
问题是,我的整个应用程序中唯一的 ImageButton 在我的启动活动中,并且在该启动活动和崩溃活动之间至少还有 2 个活动。
那么为什么这张图片还在堆里呢?
ImageButton 只是使用 android:src 属性在布局 xml 文件中定义,没有通过代码完成。堆中还有很多其他来自早期活动的较小对象。
我还编写了一个小 HelloWorld 应用程序,并查看了它的堆转储,看来,android 将以前活动的对象保存在堆中。如果是这种情况,那么有一天必须抛出Out of Memory Exception,所以我想我的分析一定有问题:/
【问题讨论】:
标签: android exception android-activity out-of-memory heap-memory