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