Quelle est la différence entre les effets LaunchedEffect et DisposableEffect en termes de leur but et comportement?
sobes.tech IA
Réponse de l'IA
LaunchedEffect et DisposableEffect sont des effets dans Jetpack Compose qui aident à gérer les effets secondaires, mais ils ont des objectifs et des comportements différents.
-
LaunchedEffect est utilisé pour lancer des coroutines qui doivent s'exécuter en réponse à la modification des clés (les clés sont des paramètres dont dépend l'effet). Il est automatiquement annulé et relancé lorsque les clés changent. Il est généralement utilisé pour des opérations asynchrones, comme le chargement de données ou le lancement d'animations.
-
DisposableEffect est destiné à exécuter des effets secondaires nécessitant de libérer des ressources lors de la destruction de l'effet. Il prend des clés et retourne une fonction de nettoyage (dispose), appelée lorsque l'effet n'est plus pertinent (par exemple, lorsque les clés changent ou que le composant est détruit). Il est utilisé pour enregistrer des écouteurs, des abonnements, libérer des ressources.
Exemple:
// LaunchedEffect pour lancer une coroutine lors du changement de userId
LaunchedEffect(userId) {
val data = repository.loadUser(userId)
// mettre à jour l'état
}
// DisposableEffect pour enregistrer et désinscrire un écouteur
DisposableEffect(sensorManager) {
val listener = object : SensorEventListener { /*...*/ }
sensorManager.registerListener(listener, sensor, SensorManager.SENSOR_DELAY_NORMAL)
onDispose {
sensorManager.unregisterListener(listener)
}
}