Qual é a diferença entre os efeitos LaunchedEffect e DisposableEffect no contexto de seus propósitos e comportamentos?
sobes.tech IA
Resposta da IA
LaunchedEffect e DisposableEffect são efeitos no Jetpack Compose que ajudam a gerir efeitos secundários, mas têm propósitos e comportamentos diferentes.
-
LaunchedEffect é usado para lançar corrotinas que devem ser executadas em resposta à alteração das chaves (as chaves são parâmetros dos quais o efeito depende). Ele é automaticamente cancelado e reiniciado quando as chaves mudam. Geralmente é usado para operações assíncronas, como carregar dados ou iniciar animações.
-
DisposableEffect destina-se a executar efeitos secundários que requerem libertar recursos quando o efeito é destruído. Ele aceita chaves e devolve uma função de limpeza (dispose), que é chamada quando o efeito deixa de ser relevante (por exemplo, quando as chaves mudam ou o componente é destruído). É usado para registar ouvintes, subscrições, libertar recursos.
Exemplo:
// LaunchedEffect para lançar uma coroutine ao alterar userId
LaunchedEffect(userId) {
val data = repository.loadUser(userId)
// atualizar estado
}
// DisposableEffect para registar e cancelar um ouvinte
DisposableEffect(sensorManager) {
val listener = object : SensorEventListener { /*...*/ }
sensorManager.registerListener(listener, sensor, SensorManager.SENSOR_DELAY_NORMAL)
onDispose {
sensorManager.unregisterListener(listener)
}
}