在内存泄漏排查中发现,主activity在退出后,没有被清理。通过profile发现存在内存泄漏。
导出hropf文件,查看路径
怀疑与compose的作用与相关。
采用composeUI后,很多泄漏无法直接从路径上看出来。
经过试验发现,泄漏出现在列表内容为空的时候,进一步排查代码发现
//如果,在这里,则会内存溢出
LaunchedEffect(scollerToIndex.value) {
listState.animateScrollToItem(scollerToIndex.value)
}
coursesToItems.value?.let {
LaunchedEffect(scollerToIndex.value) {
//如果放在外面,当列表为空的时候,显示 EmptyView,列表没有被初始化,
//造成 animateScrollToItem 执行出错,导致内存泄漏
listState.animateScrollToItem(scollerToIndex.value)
}
PullRefreshLayout(
modifier = Modifier.fillMaxWidth(),
listState = listState,
。。。)
在内存泄漏排查时候一些名称概念
incoming reference 和 outgoing reference
Shallow Heap,中文名,浅堆。Retained Heap,中文名,深堆。