Какой использовал бы Flow для работы ViewModel и Fragment

«Какой использовал бы Flow для работы ViewModel и Fragment» — вопрос из категории Coroutines и Flow, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Для связи ViewModel и Fragment с Flow:

  1. В ViewModel создаем Flow:
private val _dataFlow = MutableStateFlow<String>("")
val dataFlow: StateFlow<String> = _dataFlow

fun updateData(newData: String) {
    _dataFlow.value = newData
}
  1. В Fragment собираем Flow в lifecycleScope:
viewModel.dataFlow
    .onEach { data -> 
        // Обновляем UI
        binding.textView.text = data
    }
    .launchIn(viewLifecycleOwner.lifecycleScope)

Ключевые моменты:

  • Используем StateFlow для хранения состояния
  • ViewModel предоставляет только read-only Flow
  • Подписываемся в lifecycleScope с учетом жизненного цикла
  • ViewLifecycleOwner гарантирует отмену подписки при уничтожении View