Ответ
LiveData - поток данных с автоматической подпиской на изменения. Подходит для UI-обновлений:
val data = MutableLiveData<String>()
viewModel.data.observe(viewLifecycleOwner) { value ->
textView.text = value
}
StateFlow - корутиновый аналог LiveData, требует явного запуска в lifecycleScope:
val state = MutableStateFlow("")
lifecycleScope.launch {
viewModel.state.collect { value ->
textView.text = value
}
}
SharedFlow - для событий (snackbars, навигация), не хранит состояние:
private val _events = MutableSharedFlow<Event>()
val events = _events.asSharedFlow()
// В View
lifecycleScope.launch {
viewModel.events.collect { event ->
when(event) { ... }
}
}
Классический колбэк через интерфейс (редко, для специфичных случаев).