Sobes.tech
Junior — Middle

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