Sobes.tech
Junior — Middle

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)
    }
}