Проверяет умение выбрать подходящий реактивный инструмент для обновления UI.
LiveData — lifecycle-aware контейнер данных от Android Jetpack, автоматически останавливает сбор данных при неактивном UI. Flow — Kotlin корутиновый API для реактивных стримов, гибкий в трансформации и объединении, но требует lifecycleScope или repeatOnLifecycle для учёта жизненного цикла. Чтобы организовать ту же логику, оборачивают Flow в asLiveData() или собирают его в viewModelScope с StateFlow и отображают через observe.
LiveData:
Автоматически подписывается/отписывается при изменении состояния Activity/Fragment.
Простой API: observe(owner) { data -> … }.
Flow:
Поддерживает backpressure, операторы (map, filter, combine).
Требует явного связывания с lifecycle:
viewLifecycleOwner.lifecycleScope.launch {
viewLifecycleOwner.repeatOnLifecycle(Lifecycle.State.STARTED) {
myFlow.collect { data -> … }
}
}Организация той же логики:
Flow → LiveData: val liveData = myFlow.asLiveData()
StateFlow + UI:
private val _state = MutableStateFlow<UiState>(…)
val state: StateFlow<UiState> = _state
// В Fragment
lifecycleScope.launch {
repeatOnLifecycle(STARTED) {
viewModel.state.collect { render(it) }
}
}Выбор:
LiveData — быстрее старт, прост в использовании для UI.
Flow — больше возможностей трансформации и комбинирования данных.