android.widget.LinearLayout实例泄漏

问题描述 投票:0回答:1

我有两个活动,QuestionnaireSelectionActivity和QuestionnaireMainActivity。 QuestionnaireMainActivity最初由QuestionnaireSelectionActivity启动。 QuestionnaireMainActivity显示了一系列片段。

当我尝试通过按返回按钮从QuestionnaireMainActivity返回到QuestionnaireSelectionActivity时,LeakCanary报告了泄漏。

这两个活动都没有以任何方式引用对方(意图除外)。当片段被销毁并且没有内部类时,我将对view等的所有引用设置为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
1个回答
0
投票

此泄漏看起来类似于此处标识的泄漏:https://github.com/square/leakcanary/blob/1f6c971caba4d5cf78ac561b0cec006a2c482a1b/shark-android/src/main/java/shark/AndroidReferenceMatchers.kt#L673

看起来好像Android WindowManagerGlobal单例在活动被销毁后仍保留对LinearLayout实例的引用,尽管不清楚原因。

这很可能不是您应用程序中的错误,尽管它可能是由您应用程序特定的行为触发的。

您可以在LeakCanary中创建新期刊吗? https://github.com/square/leakcanary/issues如果您提供看到该版本的Android版本以及一个hprof文件(可以帮助很多工作),那么我们可以进行调查,甚至可以确定Android框架中的确切问题。

© www.soinside.com 2019 - 2024. All rights reserved.