Wat is het verschil tussen LaunchedEffect en DisposableEffect in de context van hun doel en gedrag?
sobes.tech AI
Antwoord van AI
LaunchedEffect en DisposableEffect zijn effecten in Jetpack Compose die helpen bij het beheren van bijwerkingen, maar ze hebben verschillende doelen en gedrag.
-
LaunchedEffect wordt gebruikt om coroutines te starten die moeten worden uitgevoerd als reactie op wijzigingen in de sleutels (de sleutels zijn parameters waarvan het effect afhankelijk is). Het wordt automatisch geannuleerd en opnieuw gestart wanneer de sleutels veranderen. Het wordt meestal gebruikt voor asynchrone operaties, zoals gegevens laden of animaties starten.
-
DisposableEffect is bedoeld om bijwerkingen uit te voeren die bronnen moeten vrijmaken wanneer het effect wordt vernietigd. Het accepteert sleutels en retourneert een opruimfunctie (dispose), die wordt aangeroepen wanneer het effect niet meer relevant is (bijvoorbeeld bij wijziging van de sleutels of vernietiging van het component). Het wordt gebruikt voor het registreren van luisteraars, abonnementen, vrijmaken van bronnen.
Voorbeeld:
// LaunchedEffect om een coroutine te starten bij wijziging van userId
LaunchedEffect(userId) {
val data = repository.loadUser(userId)
// toestand bijwerken
}
// DisposableEffect om een luisteraar te registreren en af te melden
DisposableEffect(sensorManager) {
val listener = object : SensorEventListener { /*...*/ }
sensorManager.registerListener(listener, sensor, SensorManager.SENSOR_DELAY_NORMAL)
onDispose {
sensorManager.unregisterListener(listener)
}
}