Jaký je rozdíl mezi efekty LaunchedEffect a DisposableEffect z hlediska jejich účelu a chování?
sobes.tech AI
Odpověď od AI
LaunchedEffect a DisposableEffect jsou efekty v Jetpack Compose, které pomáhají spravovat vedlejší efekty, ale mají různé účely a chování.
-
LaunchedEffect se používá k spuštění korutin, které by měly být vykonávány jako reakce na změnu klíčů (klíče jsou parametry, od kterých závisí efekt). Automaticky se zruší a znovu spustí při změně klíčů. Obvykle se používá pro asynchronní operace, například načítání dat nebo spouštění animací.
-
DisposableEffect je určen k provádění vedlejších efektů, které vyžadují uvolnění zdrojů při zániku efektu. Přijímá klíče a vrací funkci čištění (dispose), která je volána, když efekt přestane být relevantní (například při změně klíčů nebo zániku komponenty). Používá se k registraci posluchačů, odběrů, uvolnění zdrojů.
Příklad:
// LaunchedEffect pro spuštění korutiny při změně userId
LaunchedEffect(userId) {
val data = repository.loadUser(userId)
// aktualizace stavu
}
// DisposableEffect pro registraci a odregistrování posluchače
DisposableEffect(sensorManager) {
val listener = object : SensorEventListener { /*...*/ }
sensorManager.registerListener(listener, sensor, SensorManager.SENSOR_DELAY_NORMAL)
onDispose {
sensorManager.unregisterListener(listener)
}
}