#android #android-jetpack-compose #android-architecture-navigation
Вопрос:
Я использую Navigation Components
в jetpack compose. Когда я перехожу к другому, onCreate
запускался 5,6 раза.
Это мой журнал приложений, когда я запускаю приложение и перехожу на другие маршруты ->
2021-09-25 16:40:41.486 28201-28201/ir.amirsobhan.larzenegar D/HomeScreenKt$HomeScreen: ON_START
2021-09-25 16:40:41.486 28201-28201/ir.amirsobhan.larzenegar D/HomeScreenKt$HomeScreen: ON_RESUME
2021-09-25 16:40:41.486 28201-28201/ir.amirsobhan.larzenegar D/HomeScreenKt$HomeScreen: ON_START
2021-09-25 16:40:41.486 28201-28201/ir.amirsobhan.larzenegar D/HomeScreenKt$HomeScreen: ON_RESUME
2021-09-25 16:40:41.486 28201-28201/ir.amirsobhan.larzenegar D/HomeScreenKt$HomeScreen: ON_START
2021-09-25 16:40:41.486 28201-28201/ir.amirsobhan.larzenegar D/HomeScreenKt$HomeScreen: ON_RESUME
2021-09-25 16:40:41.487 28201-28201/ir.amirsobhan.larzenegar D/HomeScreenKt$HomeScreen: ON_START
2021-09-25 16:40:41.487 28201-28201/ir.amirsobhan.larzenegar D/HomeScreenKt$HomeScreen: ON_RESUME
2021-09-25 16:40:41.488 28201-28201/ir.amirsobhan.larzenegar D/HomeScreenKt$HomeScreen: ON_START
2021-09-25 16:40:41.488 28201-28201/ir.amirsobhan.larzenegar D/HomeScreenKt$HomeScreen: ON_RESUME
2021-09-25 16:40:41.509 28201-28201/ir.amirsobhan.larzenegar D/HomeScreenKt$HomeScreen: ON_CREATE
2021-09-25 16:40:41.510 28201-28201/ir.amirsobhan.larzenegar D/HomeScreenKt$HomeScreen: ON_START
2021-09-25 16:40:41.511 28201-28201/ir.amirsobhan.larzenegar D/HomeScreenKt$HomeScreen: ON_RESUME
2021-09-25 16:40:41.637 28201-28201/ir.amirsobhan.larzenegar D/HomeScreenKt$HomeScreen: ON_CREATE
2021-09-25 16:40:41.638 28201-28201/ir.amirsobhan.larzenegar D/HomeScreenKt$HomeScreen: ON_START
2021-09-25 16:40:41.638 28201-28201/ir.amirsobhan.larzenegar D/HomeScreenKt$HomeScreen: ON_RESUME
2021-09-25 16:40:41.926 28201-28201/ir.amirsobhan.larzenegar D/HomeScreenKt$HomeScreen: ON_CREATE
2021-09-25 16:40:41.926 28201-28201/ir.amirsobhan.larzenegar D/HomeScreenKt$HomeScreen: ON_START
2021-09-25 16:40:41.928 28201-28201/ir.amirsobhan.larzenegar D/HomeScreenKt$HomeScreen: ON_RESUME
2021-09-25 16:40:41.944 28201-28201/ir.amirsobhan.larzenegar D/HomeScreenKt$HomeScreen: ON_CREATE
2021-09-25 16:40:41.944 28201-28201/ir.amirsobhan.larzenegar D/HomeScreenKt$HomeScreen: ON_START
2021-09-25 16:40:41.947 28201-28201/ir.amirsobhan.larzenegar D/HomeScreenKt$HomeScreen: ON_RESUME
Это раздел приложения, в котором я настраивал компоненты навигации ->
AppTheme{
val appStateHolder = rememberAppStateHolder()
Scaffold(
bottomBar ={
if (appStateHolder.shouldShowBottomBar){
BottomNav(
navigateToRoute = appStateHolder::navigateToBottomBarRoute
)
}
},
scaffoldState = appStateHolder.scaffoldState
) {
NavHost(
navController = appStateHolder.navController,
startDestination = Constants.Navigation.HOME_SCREEN
) {
composable(Constants.Navigation.HOME_SCREEN) { HomeScreen(viewModel = hiltViewModel()) }
composable(Constants.Navigation.MAP_SCREEN) { MapScreen(viewModel = hiltViewModel()) }
composable(Constants.Navigation.LOCATION_SCREEN) { }
composable(Constants.Navigation.CHART_SCREEN) { }
composable(Constants.Navigation.SEARCH_SCREEN) { }
}
}
}
Рабочий стол ->
fun HomeScreen(viewModel: HomeViewModel) {
LocalLifecycleOwner.current.lifecycle.addObserver(object : LifecycleEventObserver {
override fun onStateChanged(source: LifecycleOwner, event: Lifecycle.Event) {
Timber.d(event.name)
}
}
Комментарии:
1. Я думаю, что вы прикрепляете несколько наблюдателей к каждой композиции, добавляете увеличивающийся идентификатор для каждого наблюдателя и печатаете его для подтверждения
2. Да, вы правы. После того, как я добавлю в него своего наблюдателя,
DisposableEffect
он покажет только истинный журнал. Большое спасибо3. С удовольствием. Держите этот вопрос в курсе, если проблема не устранится 🙂