Какие методы можно использовать для подписки на Flow в Custom View

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

Ответ

В Custom View можно использовать следующие методы для подписки на Flow:

  1. LifecycleOwner + repeatOnLifecycle (рекомендуется для UI-компонентов):
lifecycleOwner.repeatOnLifecycle(Lifecycle.State.STARTED) {
    flow.collect { value -> updateView(value) }
}
  1. launchWhenStarted (устаревший, но рабочий вариант):
lifecycleScope.launchWhenStarted {
    flow.collect { value -> updateView(value) }
}
  1. Ручное управление Job (если нет доступа к Lifecycle):
private var job: Job? = null

fun startCollecting() {
    job = CoroutineScope(Dispatchers.Main).launch {
        flow.collect { value -> updateView(value) }
    }
}

fun stopCollecting() {
    job?.cancel()
}

Важно: всегда отменяйте подписки в onDetachedFromWindow() или аналогичных методах жизненного цикла View. Для Compose используйте LaunchedEffect или collectAsState().