В чем разница между LaunchedEffect и rememberCoroutineScope

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

Ответ

LaunchedEffect и rememberCoroutineScope оба используются для запуска корутин в Compose, но с разными целями:

  • LaunchedEffect
    Запускает корутину при входе в композицию и отменяет её при выходе. Используется для одноразовых или зависящих от ключей операций (например, анимации, навигации).
    LaunchedEffect(key1 = someState) {
        // Выполнится при изменении someState
        fetchData()
    }
  • rememberCoroutineScope
    Возвращает CoroutineScope, привязанный к области композиции. Используется для ручного управления корутинами (например, по клику).
    val scope = rememberCoroutineScope()
    Button(onClick = {
        scope.launch { fetchData() }
    })

Ключевое отличие:
LaunchedEffect — автоматический запуск/отмена, rememberCoroutineScope — ручной контроль.