【发布时间】:2020-01-23 14:23:45
【问题描述】:
我有两个活动,QuestionnaireSelectionActivity 和 QuestionnaireMainActivity。 QuestionnaireMainActivity 由 QuestionnaireSelectionActivity 启动。 QuestionnaireMainActivity 显示一系列片段。
当我尝试通过按返回按钮从 QuestionnaireMainActivity 返回 QuestionnaireSelectionActivity 时,LeakCanary 报告泄漏。
这两个活动都没有以任何方式(除了意图)引用另一个。当片段被销毁并且没有内部类时,我将对视图等的所有引用设置为 null。
QuestionnaireSelectionActivity 确实有一个 LinearLayout,但我不明白它是如何参与这个问题的。我没有在我的代码中引用任何 LinearLayout。
谁能帮助我了解我的活动是如何泄露的?
以下是 LeakCanary 的报告:
│ GC Root: System class
│
├─ android.view.WindowManagerGlobal class
│ Leaking: NO (a class is never leaking)
│ ↓ static WindowManagerGlobal.sDefaultWindowManager
│ ~~~~~~~~~~~~~~~~~~~~~
├─ android.view.WindowManagerGlobal instance
│ Leaking: UNKNOWN
│ ↓ WindowManagerGlobal.mViews
│ ~~~~~~
├─ java.util.ArrayList instance
│ Leaking: UNKNOWN
│ ↓ ArrayList.elementData
│ ~~~~~~~~~~~
├─ java.lang.Object[] array
│ Leaking: UNKNOWN
│ ↓ Object[].[2]
│ ~~~
├─ android.widget.LinearLayout instance
│ Leaking: YES (View.mContext references a destroyed activity)
│ mContext instance of com.android.neptune.QuestionnaireMainActivity with mDestroyed = true
│ View#mParent is set
│ View#mAttachInfo is not null (view attached)
│ View.mWindowAttachCount = 1
│ ↓ LinearLayout.mContext
╰→ com.android.nq.QuestionnaireMainActivity instance
Leaking: YES (ObjectWatcher was watching this because com.android.nq.QuestionnaireMainActivity received Activity#onDestroy() callback and Activity#mDestroyed is true)
key = c4204b14-4279-44d3-ba57-83e5cb26a1ef
watchDurationMillis = 5185
retainedDurationMillis = 183
【问题讨论】:
标签: android android-activity memory-leaks leakcanary