Sobes.tech
Junior — Middle
119

¿Cuál es la diferencia entre los efectos LaunchedEffect y DisposableEffect en términos de su propósito y comportamiento?

Empresas donde se preguntó
WildberriesWildberries

Respuesta de la IA

sobes.tech AI

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)
    }
}