Итак, моя MainActivity выглядит так:
Код: Выделить всё
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
...
NavHost(navController = navController, startDestination = *AuthFeature graph*) {
navigation(*AuthFeature graph*) {
composable(*First Screen*) { backStackEntry ->
val authGraphEntry = *get authGraphEntry*
val vm = hiltViewModel(authGraphEntry)
...
}
composable(*Second Screen*) { backStackEntry ->
val authGraphEntry = *get authGraphEntry*
val vm = hiltViewModel(authGraphEntry)
...
}
}
*Other feature graph with multiple screens*
}
}
Появляется проблема. когда я решу создать одну ViewModel для каждого экрана. На первом и втором экранах предполагается использовать один и тот же экземпляр AuthRepo, однако аннотирование AuthRepo с помощью @ViewModelScoped приводит к созданию двух экземпляров AuthRepo, поскольку у меня есть 2 модели просмотра. . Добавление аннотации @Singleton приводит к созданию одного экземпляра для всего приложения, который не будет удален после перехода к другой функции.
Я придумал два способа. Чтобы решить эту проблему:
- Оберните каждую функцию в действие и используйте @ActivityRetainedScoped. Однако я хочу использовать шаблон SingleActivity в своем проекте, поэтому это решение для меня не подходит.
- Используйте Dagger и его пользовательские области действия. Но мне хотелось бы иметь более простое решение без ручной обработки жизненного цикла компонентов, чтобы сохранить чистоту кода и снизить вероятность ошибок.
Подробнее здесь: https://stackoverflow.com/questions/776 ... fecycle-us