PopupLayout出现内存泄漏?怀疑与SelectionContainer相关求解决方案
关于PopupLayout内存泄漏的排查求助
我遇到了PopupLayout内存泄漏问题,通过LeakCanary检测到存在应用泄漏,目前怀疑该问题与SelectionContainer有关,但无法确定具体原因也找不到解决办法,以下是LeakCanary的堆分析日志:
D/LeakCanary: 发现2条指向保留对象的引用路径 D/LeakCanary: 分析进行中,完成50%,正在检查对象 D/LeakCanary: 分析进行中,完成60%,正在计算Native保留内存大小 D/LeakCanary: 分析进行中,完成70%,正在计算保留内存大小 I/iq.mliq.: 后台并发复制GC释放了1217073个(30MB)分配空间对象,1个(516KB)大对象空间(LOS)对象,内存使用率71%,剩余58MB/总82MB,暂停时间50us,总耗时129.711ms D/LeakCanary: 分析进行中,完成80%,正在构建泄漏引用链 D/LeakCanary: 分析进行中,完成90%,正在上报堆分析结果 V/SQLiteDatabase: triggerBuildingIndex(): 无效ID,返回。 D/LeakCanary: D/LeakCanary: ==================================== D/LeakCanary: 堆分析结果 D/LeakCanary: ==================================== D/LeakCanary: 1处应用泄漏 D/LeakCanary: D/LeakCanary: 带下划线"~~~"的引用是可能的泄漏原因。 D/LeakCanary: D/LeakCanary: 泄漏对象保留了60230字节内存 D/LeakCanary: 仅显示2条相同签名引用链中的1条 D/LeakCanary: 签名: 6b9af3bfc8523409a555c9e53bc41c4a631fd096 D/LeakCanary: ┬─── D/LeakCanary: │ GC根节点: Thread对象 D/LeakCanary: │ D/LeakCanary: ├─ android.os.HandlerThread实例 D/LeakCanary: │ 未泄漏: 否 (PathClassLoader↓ 未泄漏) D/LeakCanary: │ 线程名称: 'plumber-android-leaks' D/LeakCanary: │ ↓ Thread.contextClassLoader D/LeakCanary: ├─ dalvik.system.PathClassLoader实例 D/LeakCanary: │ 未泄漏: 否 (SnapshotKt↓ 未泄漏,且ClassLoader永远不会泄漏) D/LeakCanary: │ ↓ ClassLoader.runtimeInternalObjects D/LeakCanary: ├─ java.lang.Object[] 数组 D/LeakCanary: │ 未泄漏: 否 (SnapshotKt↓ 未泄漏) D/LeakCanary: │ ↓ Object[1891] D/LeakCanary: ├─ androidx.compose.runtime.snapshots.SnapshotKt 类 D/LeakCanary: │ 未泄漏: 否 (Recomposer↓ 未泄漏,且类永远不会泄漏) D/LeakCanary: │ ↓ 静态字段 SnapshotKt.applyObservers D/LeakCanary: ├─ java.util.ArrayList实例 D/LeakCanary: │ 未泄漏: 否 (Recomposer↓ 未泄漏) D/LeakCanary: │ ↓ ArrayList[6] D/LeakCanary: ├─ androidx.compose.runtime.Recomposer$recompositionRunner$2$unregisterApplyObserver$1实例 D/LeakCanary: │ 未泄漏: 否 (Recomposer↓ 未泄漏) D/LeakCanary: │ kotlin.jvm.internal.Lambda的匿名子类 D/LeakCanary: │ ↓ Recomposer$recompositionRunner$2$unregisterApplyObserver$1.this$0 D/LeakCanary: ├─ androidx.compose.runtime.Recomposer实例 D/LeakCanary: │ 未泄漏: 否 (CompositionImpl↓ 未泄漏,且Recomposer处于Idle状态) D/LeakCanary: │ ↓ Recomposer._knownCompositions D/LeakCanary: ├─ java.util.ArrayList实例 D/LeakCanary: │ 未泄漏: 否 (CompositionImpl↓ 未泄漏) D/LeakCanary: │ ↓ ArrayList[7] D/LeakCanary: ├─ androidx.compose.runtime.CompositionImpl实例 D/LeakCanary: │ 未泄漏: 否 (Composition未被销毁) D/LeakCanary: │ ↓ CompositionImpl.composer D/LeakCanary: │ ~~~~~~~~ D/LeakCanary: ├─ androidx.compose.runtime.ComposerImpl实例 D/LeakCanary: │ 泄漏状态: 未知 D/LeakCanary: │ 保留了73.8 kB内存,涉及1511个对象 D/LeakCanary: │ ↓ ComposerImpl.insertTable D/LeakCanary: │ ~~~~~~~~~~~ D/LeakCanary: ├─ androidx.compose.runtime.SlotTable实例 D/LeakCanary: │ 泄漏状态: 未知 D/LeakCanary: │ 保留了37 B内存,涉及1个对象 D/LeakCanary: │ ↓ SlotTable.slots D/LeakCanary: │ ~~~~~ D/LeakCanary: ├─ java.lang.Object[] 数组 D/LeakCanary: │ 泄漏状态: 未知 D/LeakCanary: │ 保留了68.3 kB内存,涉及1456个对象 D/LeakCanary: │ ↓ Object[106] D/LeakCanary: │ ~~~~~ D/LeakCanary: ╰→ androidx.compose.ui.window.PopupLayout实例 D/LeakCanary: 泄漏状态: 是 (ObjectWatcher监测到此对象,因为androidx.compose.ui.window.PopupLayout收到了 D/LeakCanary: View#onDetachedFromWindow()回调) D/LeakCanary: 保留了30.1 kB内存,涉及606个对象 D/LeakCanary: key = 85e935b6-558c-42b2-bb1a-ed54d592fba7 D/LeakCanary: 监测时长(毫秒): 6822 D/LeakCanary: 保留时长(毫秒): 1821 D/LeakCanary: View不属于窗口视图层级 D/LeakCanary: View.mAttachInfo为null (视图已脱离) D/LeakCanary: View.mID = R.id.null D/LeakCanary: View.mWindowAttachCount = 1 D/LeakCanary: mContext是ac.mdiq.mliq.elements.EditActivity的实例,且mDestroyed = false D/LeakCanary: ==================================== D/LeakCanary: 0处库泄漏 D/LeakCanary: D/LeakCanary: 库泄漏是由第三方代码中的已知Bug导致的,你无法控制此类问题。 D/LeakCanary: ==================================== D/LeakCanary: 0处不可达对象 D/LeakCanary: D/LeakCanary: 不可达对象仍在内存中,但LeakCanary无法找到从GC根节点出发的强引用路径 D/LeakCanary: ==================================== D/LeakCanary: 元数据 D/LeakCanary: D/LeakCanary: 提交Bug报告或Stack Overflow问题时请包含此部分内容。
内容的提问来源于stack exchange,提问作者LXJ
相关产品推荐
相关产品推荐

