Я добавляю ComposeView прямо в корень активности (именно так я запускаю ModalBottomsheetLayout из представления xml, пример ниже упрощен, но все же воспроизводим)
Вот весь фрагмент воспроизводимого примера:
когда я нажимаю «launchBS» — ComposeView добавляется в действие, которое содержит NavHost для будущей модели представления. область видимости и т. д.
когда я нажимаю «закрытьBS» — я открываю стек NavController и удаляю ComposeView из активности.
Проблема:
при удалении ComposeView — NavHostController все еще выделяется в памяти. Например, когда я открываю/закрываю 5 раз, у меня есть 5 распределений. Освобождение происходит только при уничтожении активности.
Вопросы:
Это предназначено поведение NahHost / NavController?
Существует ли исправление или обходной путь для уничтожения NavController и связанных с ним выделений NavHost, даже если активность все еще активна?
Я добавляю ComposeView прямо в корень активности (именно так я запускаю ModalBottomsheetLayout из представления xml, пример ниже упрощен, но все же воспроизводим) Вот весь фрагмент воспроизводимого примера: [code]class TestFragment : Fragment() {
private fun launchBS() { activity ?.findViewById(android.R.id.content) ?.let { viewGroup -> val composeView = 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 ) } } } [/code] Объяснение: [list] [*]когда я нажимаю «launchBS» — ComposeView добавляется в действие, которое содержит NavHost для будущей модели представления. область видимости и т. д. [*]когда я нажимаю «закрытьBS» — я открываю стек NavController и удаляю ComposeView из активности. [/list] Проблема: [list] [*]при удалении ComposeView — NavHostController все еще выделяется в памяти. Например, когда я открываю/закрываю 5 раз, у меня есть 5 распределений. Освобождение происходит только при уничтожении активности. [/list] Вопросы: [list] [*]Это предназначено поведение NahHost / NavController? [*]Существует ли исправление или обходной путь для уничтожения NavController и связанных с ним выделений NavHost, даже если активность все еще активна? [/list]Вот воспроизводимый пример https://github.com/dkachan1941/Android-NavHost-Leak-Demo [img]https://i.sstatic .net/wcx8JLY8.png[/img] [img]https://i.sstatic.net/6ftglrBM.png[/img]