Как правильно использовать потоки в модели представления?Android

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Как правильно использовать потоки в модели представления?

Сообщение Anonymous »

В своем приложении для 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»