Aký je rozdiel medzi efektami LaunchedEffect a DisposableEffect v kontexte ich účelu a správania?
sobes.tech AI
Odpoveď od AI
LaunchedEffect a DisposableEffect sú efekty v Jetpack Compose, ktoré pomáhajú pri správe vedľajších efektov, ale majú rôzne účely a správanie.
-
LaunchedEffect sa používa na spustenie korutín, ktoré by mali byť vykonané ako reakcia na zmenu kľúčov (kľúče sú parametre, od ktorých závisí efekt). Automaticky sa zruší a znovu spustí pri zmene kľúčov. Zvyčajne sa používa na asynchrónne operácie, ako je načítanie dát alebo spustenie animácií.
-
DisposableEffect je určený na vykonávanie vedľajších efektov, ktoré vyžadujú uvoľnenie zdrojov pri zániku efektu. Prijíma kľúče a vracia funkciu čistenia (dispose), ktorá sa volá, keď efekt už nie je relevantný (napríklad pri zmene kľúčov alebo zániku komponentu). Používa sa na registráciu poslucháčov, odberov, uvoľnenie zdrojov.
Príklad:
// LaunchedEffect na spustenie korutíny pri zmene userId
LaunchedEffect(userId) {
val data = repository.loadUser(userId)
// aktualizácia stavu
}
// DisposableEffect na registráciu a odhlásenie poslucháča
DisposableEffect(sensorManager) {
val listener = object : SensorEventListener { /*...*/ }
sensorManager.registerListener(listener, sensor, SensorManager.SENSOR_DELAY_NORMAL)
onDispose {
sensorManager.unregisterListener(listener)
}
}