Sobes.tech
Junior — Middle

Como o Android implementa o mecanismo de preservação do estado do ViewModel durante alterações de configuração ou no ciclo de vida?

sobes.tech IA

Resposta da IA

No Android, o ViewModel destina-se a armazenar e gerir dados de UI tendo em conta o ciclo de vida. Quando ocorrem alterações de configuração (por exemplo, rotação de ecrã), o sistema destrói a Activity ou Fragment, mas o ViewModel mantém-se e é reapresentado às novas instâncias.

Isto é conseguido através do ViewModelProvider, que liga o ViewModel ao ciclo de vida do componente. O ViewModel permanece na memória enquanto estiver ligado ao ciclo de vida do proprietário (Activity/Fragment). Quando o componente é destruído devido a uma alteração de configuração, o ViewModel não é destruído, mas reutilizado numa nova instância.

Para guardar o estado dentro do ViewModel, pode usar o SavedStateHandle, um objeto especial que permite guardar e restaurar dados em caso de destruição do processo ou outras situações que vão além de uma simples alteração de configuração.

Exemplo de uso do SavedStateHandle:

class MyViewModel(private val state: SavedStateHandle) : ViewModel() {
    var counter: Int
        get() = state.get<Int>("counter") ?: 0
        set(value) = state.set("counter", value)
}

Assim, o ViewModel guarda dados na memória durante alterações de configuração, e o SavedStateHandle ajuda a manter o estado em eventos mais graves, como a destruição do processo.