В своем приложении для Android я получаю данные из Room и показываю их на картах. Я столкнулся с этими двумя подходами к выборке данных с помощью модели представления.
Какой из них более эффективный и хороший?
В настоящее время я извлекаю данные. со вторым подходом. Он работает нормально. Просто интересно, в чем разница между этими двумя.
Первый подход:
private val _visibleRegion = MutableStateFlow(defaultVisibleRegion)
private val _zoomLevel = MutableStateFlow(6f)
private val _isFavorite = MutableStateFlow(false)
val mapData: StateFlow
> = combine(
_visibleRegion,
_zoomLevel,
_isFavorite
) { region, zoom, isFav ->
Triple(region, zoom, isFav)
}.flatMapLatest { (region, zoom, isFav) ->
repo.getDataInBoundsPaged(
region.southwest.latitude,
region.northeast.latitude,
region.southwest.longitude,
region.northeast.longitude,
zoom = zoom,
isFav = isFav
)
}.stateIn(
scope = viewModelScope,
started = SharingStarted.WhileSubscribed(5000),
initialValue = PagingData.empty()
)
fun updateVisibleRegion(region: LatLngBounds) {
_visibleRegion.value = region
}
fun updateZoomLevel(zoom: Float) {
_zoomLevel.value = zoom
}
fun toggleFavorite(isFavorite: Boolean) {
_isFavorite.value = isFavorite
}
против
Второй подход:
private val _mapData = MutableStateFlow(PagingData.empty())
val mapData: StateFlow = _mapData.asStateFlow()
private val defaultVisibleRegion = LatLngBounds(
LatLng(6.792525080049721, 70.06730787456036),
LatLng(37.411989227903604, 86.94231156259775)
)
init {
fetchMapData()
}
fun fetchMapData(
visibleRegion: LatLngBounds = defaultVisibleRegion,
zoomLevel: Float = 6f,
isFavorite: Boolean = false
) {
viewModelScope.launch {
repo.getDataInBoundsPaged(
visibleRegion.southwest.latitude,
visibleRegion.northeast.latitude,
visibleRegion.southwest.longitude,
visibleRegion.northeast.longitude,
zoom = zoomLevel,
isFav = isFavorite
)
.cachedIn(viewModelScope)
.collect {
_mapData.value = it
}
}
}
Подробнее здесь: https://stackoverflow.com/questions/790 ... view-model
Как правильно использовать потоки в модели представления? ⇐ Android
Форум для тех, кто программирует под Android
-
Anonymous
1727910649
Anonymous
В своем приложении для Android я получаю данные из Room и показываю их на картах. Я столкнулся с этими двумя подходами к выборке данных с помощью модели представления.
Какой из них более эффективный и хороший?
В настоящее время я извлекаю данные. со вторым подходом. Он работает нормально. Просто интересно, в чем разница между этими двумя.
[b]Первый подход:[/b]
private val _visibleRegion = MutableStateFlow(defaultVisibleRegion)
private val _zoomLevel = MutableStateFlow(6f)
private val _isFavorite = MutableStateFlow(false)
val mapData: StateFlow
> = combine(
_visibleRegion,
_zoomLevel,
_isFavorite
) { region, zoom, isFav ->
Triple(region, zoom, isFav)
}.flatMapLatest { (region, zoom, isFav) ->
repo.getDataInBoundsPaged(
region.southwest.latitude,
region.northeast.latitude,
region.southwest.longitude,
region.northeast.longitude,
zoom = zoom,
isFav = isFav
)
}.stateIn(
scope = viewModelScope,
started = SharingStarted.WhileSubscribed(5000),
initialValue = PagingData.empty()
)
fun updateVisibleRegion(region: LatLngBounds) {
_visibleRegion.value = region
}
fun updateZoomLevel(zoom: Float) {
_zoomLevel.value = zoom
}
fun toggleFavorite(isFavorite: Boolean) {
_isFavorite.value = isFavorite
}
[b]против
Второй подход:[/b]
private val _mapData = MutableStateFlow(PagingData.empty())
val mapData: StateFlow = _mapData.asStateFlow()
private val defaultVisibleRegion = LatLngBounds(
LatLng(6.792525080049721, 70.06730787456036),
LatLng(37.411989227903604, 86.94231156259775)
)
init {
fetchMapData()
}
fun fetchMapData(
visibleRegion: LatLngBounds = defaultVisibleRegion,
zoomLevel: Float = 6f,
isFavorite: Boolean = false
) {
viewModelScope.launch {
repo.getDataInBoundsPaged(
visibleRegion.southwest.latitude,
visibleRegion.northeast.latitude,
visibleRegion.southwest.longitude,
visibleRegion.northeast.longitude,
zoom = zoomLevel,
isFav = isFavorite
)
.cachedIn(viewModelScope)
.collect {
_mapData.value = it
}
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79048612/how-to-correctly-consume-flows-in-the-view-model[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия