Sobes.tech
Junior — Middle

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