Какое различие между эффектами LaunchedEffect и DisposableEffect в контексте их назначения и поведения?
Answer from AI
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)
}
}