Sobes.tech
Junior — Middle

Kuo skiriasi LaunchedEffect ir DisposableEffect efektai jų paskirties ir elgesio požiūriu?

sobes.tech AI

Atsakymas iš AI

LaunchedEffect ir DisposableEffect yra efektai Jetpack Compose, kurie padeda valdyti šalutinius poveikius, tačiau jie turi skirtingus tikslus ir elgseną.

  • LaunchedEffect naudojamas paleisti korutinas, kurios turi būti vykdomos atsakant į raktų (raktai — tai parametrai, nuo kurių priklauso efektas) pokyčius. Jis automatiškai atšaukiamas ir perkraunamas, kai keičiasi raktai. Paprastai naudojamas asinchroninėms operacijoms, pvz., duomenų įkėlimui ar animacijų paleidimui.

  • DisposableEffect skirtas vykdyti šalutinius poveikius, kurie reikalauja išlaisvinti išteklius, kai efektas yra sunaikinamas. Jis priima raktus ir grąžina valymo funkciją (dispose), kuri kviečiama, kai efektas nebėra aktualus (pvz., keičiantis raktams arba sunaikinus komponentą). Naudojamas registruojant klausytojus, prenumeratas, išlaisvinant išteklius.

Pavyzdys:

// LaunchedEffect, kad paleisti korutiną keičiant userId
LaunchedEffect(userId) {
    val data = repository.loadUser(userId)
    // būsenos atnaujinimas
}

// DisposableEffect, kad registruoti ir atšaukti klausytoją
DisposableEffect(sensorManager) {
    val listener = object : SensorEventListener { /*...*/ }
    sensorManager.registerListener(listener, sensor, SensorManager.SENSOR_DELAY_NORMAL)
    onDispose {
        sensorManager.unregisterListener(listener)
    }
}