Mi a különbség a LaunchedEffect és a DisposableEffect hatásai között céljuk és viselkedésük szempontjából?
sobes.tech MI
Válasz az MI-től
A LaunchedEffect és a DisposableEffect olyan hatások a Jetpack Compose-ban, amelyek segítenek a mellékhatások kezelésében, de különböző célokra és viselkedésekkel rendelkeznek.
-
LaunchedEffect arra szolgál, hogy korutinokat indítson, amelyeknek végre kell hajtódniuk a kulcsok (a kulcsok olyan paraméterek, amelyektől függ a hatás) változására reagálva. Automatikusan megszakítja és újraindítja őket, amikor a kulcsok változnak. Általában aszinkron műveletekhez használják, például adatok betöltéséhez vagy animációk indításához.
-
DisposableEffect célja olyan mellékhatások végrehajtása, amelyek erőforrásokat igényelnek a hatás megsemmisítésekor. Kulcsokat fogad el, és egy takarító függvényt (dispose) ad vissza, amely akkor hívódik meg, amikor a hatás már nem releváns (például, amikor a kulcsok változnak vagy a komponens megsemmisül). Általában hallgatók regisztrálására, feliratkozások kezelésére, erőforrások felszabadítására használják.
Példa:
// LaunchedEffect a korutin indítására userId változásakor
LaunchedEffect(userId) {
val data = repository.loadUser(userId)
// állapot frissítése
}
// DisposableEffect hallgató regisztrálására és törlésére
DisposableEffect(sensorManager) {
val listener = object : SensorEventListener { /*...*/ }
sensorManager.registerListener(listener, sensor, SensorManager.SENSOR_DELAY_NORMAL)
onDispose {
sensorManager.unregisterListener(listener)
}
}