Какое различие между эффектами LaunchedEffect и DisposableEffect в контексте их назначения и поведения?

LaunchedEffect и DisposableEffect — это эффекты в Jetpack Compose, которые помогают управлять побочными эффектами, но они имеют разные назначения и поведение.

Короткий ответ

Что ответить на собеседовании

LaunchedEffect и DisposableEffect — это эффекты в Jetpack Compose, которые помогают управлять побочными эффектами, но они имеют разные назначения и поведение.

Подробный разбор

Ответ с пояснениями

LaunchedEffect и DisposableEffect — это эффекты в Jetpack Compose, которые помогают управлять побочными эффектами, но они имеют разные назначения и поведение.

  • LaunchedEffect используется для запуска корутин, которые должны выполняться в ответ на изменение ключей (ключи — это параметры, от которых зависит эффект). Он автоматически отменяется и перезапускается при изменении ключей. Обычно применяется для асинхронных операций, например, загрузки данных или запуска анимаций.
  • DisposableEffect предназначен для выполнения побочных эффектов, которые требуют очистки ресурсов при уничтожении эффекта. Он принимает ключи и возвращает функцию очистки (dispose), которая вызывается, когда эффект перестаёт быть актуальным (например, при изменении ключей или уничтожении компонента). Используется для регистрации слушателей, подписок, освобождения ресурсов.

Пример:

// LaunchedEffect для запуска корутины при изменении userId
LaunchedEffect(userId) {
    val data = repository.loadUser(userId)
    // обновить состояние
}

// DisposableEffect для регистрации и отписки слушателя
DisposableEffect(sensorManager) {
    val listener = object : SensorEventListener { /*...*/ }
    sensorManager.registerListener(listener, sensor, SensorManager.SENSOR_DELAY_NORMAL)
    onDispose {
        sensorManager.unregisterListener(listener)
    }
}

Практика в реальном времени

Подготовьтесь к следующему собеседованию

Interview Boost учитывает вакансию, резюме и технологии и помогает сформулировать ответ прямо во время интервью.

Начать подготовку