Sobes.tech
Назад к вопросам
Junior — Middle
73

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

Компании, где спрашивали
WildberriesWildberries

Ответ от нейросети

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