Каква е разликата между ефектите LaunchedEffect и DisposableEffect в контекста на тяхната цел и поведение?
sobes.tech AI
Отговор от 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)
}
}