Вот весь фрагмент воспроизводимого примера:
Код: Выделить всё
class TestFragment : Fragment() {
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View {
return ComposeView(requireContext()).apply {
setViewCompositionStrategy(
ViewCompositionStrategy
.DisposeOnViewTreeLifecycleDestroyed,
)
setContent {
LazyColumn(
verticalArrangement = Arrangement.Top,
horizontalAlignment = Alignment.CenterHorizontally,
) {
item {
ListItem(title = "launchBS") { launchBS() }
}
item {
ListItem(title = "closeBS") {
activity
?.findViewById(android.R.id.content)
?.let { viewGroup ->
val viewToRemove = viewGroup.findViewWithTag(BS_VIEW_TAG)
viewToRemove?.disposeComposition()
viewGroup.removeView(viewToRemove)
}
}
}
}
}
}
}
private fun launchBS() {
activity
?.findViewById(android.R.id.content)
?.let { viewGroup ->
val composeView = ComposeView(viewGroup.context).apply {
ComposeView(viewGroup.context).apply {
setViewCompositionStrategy(
ViewCompositionStrategy.DisposeOnDetachedFromWindow
)
}
setContent {
val navController = rememberNavController()
NavHost(navController, startDestination = DEFAULT_DESTINATION) {
composable(DEFAULT_DESTINATION) {
Text(text = "COMPOSE BOTTOMSHEET IS DISPLAYING")
}
}
DisposableEffect(Unit) {
onDispose {
navController.popBackStack(DEFAULT_DESTINATION, true)
}
}
}
tag = BS_VIEW_TAG
}
viewGroup.addView(
composeView
)
}
}
- когда я нажимаю «запуститьBS» — ComposeView добавляется в действие, которое содержит NavHost для будущей области видимости модели и т. д.
- когда я нажимаю «закрытьBS» - я извлекаю стек NavController и удаляю ComposeView из активности.
- при удалении ComposeView - NavHostController все равно выделяется в памяти. Например, когда я открываю/закрываю 5 раз, у меня есть 5 распределений. Освобождение происходит только при уничтожении активности.
- Это предназначено поведение NahHost / NavController?
- Существует ли исправление или обходной путь для уничтожения NavController и связанных с ним выделений NavHost, даже если активность все еще активна?

Подробнее здесь: https://stackoverflow.com/questions/791 ... is-leaking