Я реализовал навигацию на основе ViewModel, как показано в моем коде ниже. Основная идея — это класс Singleton NavigationManager, который доступен как для составных объектов, так и для ViewModel, посредством внедрения зависимостей. NavigationManager имеет свойство SharedFlow с именем Direction, которое можно изменить, например. ViewModel и наблюдается составными объектами.
Теперь мой вопрос по этому поводу:
Безопасно ли использовать SharedFlow в этой ситуации? Поскольку SharedFlow является горячим потоком и, следовательно, может генерировать события, оставаясь при этом незамеченным, возможно ли, что события навигации будут потеряны? Например. возможно ли, что событие навигации генерируется, когда пользователь поворачивает свой телефон, а NavigationManger.direction SharedFlow не наблюдается в течение короткого времени (поскольку действие воссоздается при вращении)?
// MainActivity.kt
// navigationManager.direction is observed here
// NavigationManager is a Singleton injected via dependency injection
@AndroidEntryPoint
class MainActivity : ComponentActivity() {
@Inject
lateinit var navigationManager: NavigationManager
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
MyJetpackComposeTheme {
val navController = rememberNavController()
MyNavHost(navController)
LaunchedEffect(navigationManager.direction) {
navigationManager.direction.collect { direction ->
direction?.let {
Log.i("NavTest", "change route to: $direction")
navController.navigate(direction)
}
}
}
}
}
}
}
// The navigation manager. Instantiating it is done by the
// depdendency injection framework, not shown here for brevitiy
class NavigationManager(private val externalScope: CoroutineScope) {
private val _direction = MutableSharedFlow()
val direction : SharedFlow = _direction
fun navigate(direction: String) {
Log.d("NavTest", "navigating to $direction")
externalScope.launch {
_direction.emit(direction)
}
}
}
// triggering navigation from inside a ViewModel would be like this
// (navigationManger would be injected via dependency injection)
navigationManager.navigate("some_direction")
Подробнее здесь: https://stackoverflow.com/questions/725 ... navigation
Безопасно ли использовать SharedFlow для навигации, управляемой ViewModel? ⇐ Android
Форум для тех, кто программирует под Android
1761647029
Anonymous
Я реализовал навигацию на основе ViewModel, как показано в моем коде ниже. Основная идея — это класс Singleton NavigationManager, который доступен как для составных объектов, так и для ViewModel, посредством внедрения зависимостей. NavigationManager имеет свойство SharedFlow с именем Direction, которое можно изменить, например. ViewModel и наблюдается составными объектами.
Теперь мой вопрос по этому поводу:
Безопасно ли использовать SharedFlow в этой ситуации? Поскольку SharedFlow является горячим потоком и, следовательно, может генерировать события, оставаясь при этом незамеченным, возможно ли, что события навигации будут потеряны? Например. возможно ли, что событие навигации генерируется, когда пользователь поворачивает свой телефон, а NavigationManger.direction SharedFlow не наблюдается в течение короткого времени (поскольку действие воссоздается при вращении)?
// MainActivity.kt
// navigationManager.direction is observed here
// NavigationManager is a Singleton injected via dependency injection
@AndroidEntryPoint
class MainActivity : ComponentActivity() {
@Inject
lateinit var navigationManager: NavigationManager
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
MyJetpackComposeTheme {
val navController = rememberNavController()
MyNavHost(navController)
LaunchedEffect(navigationManager.direction) {
navigationManager.direction.collect { direction ->
direction?.let {
Log.i("NavTest", "change route to: $direction")
navController.navigate(direction)
}
}
}
}
}
}
}
// The navigation manager. Instantiating it is done by the
// depdendency injection framework, not shown here for brevitiy
class NavigationManager(private val externalScope: CoroutineScope) {
private val _direction = MutableSharedFlow()
val direction : SharedFlow = _direction
fun navigate(direction: String) {
Log.d("NavTest", "navigating to $direction")
externalScope.launch {
_direction.emit(direction)
}
}
}
// triggering navigation from inside a ViewModel would be like this
// (navigationManger would be injected via dependency injection)
navigationManager.navigate("some_direction")
Подробнее здесь: [url]https://stackoverflow.com/questions/72506276/is-it-safe-to-use-sharedflow-for-viewmodel-driven-navigation[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия