Care este diferența dintre efectele LaunchedEffect și DisposableEffect în contextul scopului și comportamentului lor?
sobes.tech AI
Răspuns de la AI
LaunchedEffect și DisposableEffect sunt efecte în Jetpack Compose care ajută la gestionarea efectelor secundare, dar au scopuri și comportamente diferite.
-
LaunchedEffect este folosit pentru a porni corutine care trebuie să fie executate ca răspuns la modificarea cheilor (cheile sunt parametri de la care depinde efectul). Acesta este automat anulat și repornit atunci când cheile se schimbă. De obicei, este utilizat pentru operațiuni asincrone, cum ar fi încărcarea datelor sau inițierea animațiilor.
-
DisposableEffect este destinat să execute efecte secundare care necesită eliberarea resurselor atunci când efectul este distrus. Primește chei și returnează o funcție de curățare (dispose), care este apelată atunci când efectul nu mai este relevant (de exemplu, când cheile se schimbă sau componenta este distrusă). Este folosit pentru înregistrarea ascultătorilor, abonamentelor, eliberarea resurselor.
Exemplu:
// LaunchedEffect pentru a porni o corutină la schimbarea userId
LaunchedEffect(userId) {
val data = repository.loadUser(userId)
// actualizează starea
}
// DisposableEffect pentru înregistrarea și dezînregistrarea unui ascultător
DisposableEffect(sensorManager) {
val listener = object : SensorEventListener { /*...*/ }
sensorManager.registerListener(listener, sensor, SensorManager.SENSOR_DELAY_NORMAL)
onDispose {
sensorManager.unregisterListener(listener)
}
}