В чем разница между Flow и LiveData

«В чем разница между Flow и LiveData» — вопрос из категории Coroutines и Flow, который задают на 26% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Flow и LiveData — это реактивные компоненты, но с разными подходами и сферами применения.

LiveData:

  • Простая реализация, привязанная к жизненному циклу Android (Activity/Fragment).
  • Автоматически управляет подписками (отмена при onDestroy).
  • Поддерживает только синхронные операции.
  • Используется в UI-слое для наблюдения за изменениями данных.

Flow:

  • Асинхронный поток данных из Kotlin Coroutines.
  • Не зависит от жизненного цикла (нужно явно отменять через lifecycleScope/viewModelScope).
  • Поддерживает сложные операции (map, filter, combine).
  • Работает в любом слое приложения (UI, domain, data).

Пример:

// LiveData
val liveData = MutableLiveData<String>()
liveData.observe(viewLifecycleOwner) { value -> /* UI update */ }

// Flow
val flow = flow { emit("Hello") }
flow.collectIn(viewLifecycleOwner) { value -> /* UI update */ }

Выбор: LiveData для простых UI-обновлений, Flow для сложной асинхронной логики.