Sobes.tech
Middle

Como guardar o estado do ViewModel nos componentes arquitetônicos do Android?

sobes.tech IA

Resposta da IA

Para guardar o estado do ViewModel, que sobreviverá à a destruição do processo, utiliza-se SavedStateHandle.

SavedStateHandle é um armazenamento semelhante a um Map, associado ao estado guardado de uma Activity ou Fragment.

Princípio de funcionamento:

  1. ViewModel recebe SavedStateHandle como parâmetro do construtor.
  2. Os dados são salvos em SavedStateHandle usando o método set().
  3. Ao restaurar a Activity/Fragment, os dados salvos estão disponíveis automaticamente no SavedStateHandle do ViewModel, que será recriado.

Exemplo de uso:

class MyViewModel(private val state: SavedStateHandle) : ViewModel() {

    private val _myValue = state.getLiveData<String>("myKey")
    val myValue: LiveData<String> get() = _myValue

    fun saveValue(newValue: String) {
        state.set("myKey", newValue)
    }
}

SavedStateHandle suporta o armazenamento de tipos primitivos, como Int, String, Boolean, bem como objetos parcelable e serializáveis.

É importante entender que SavedStateHandle destina-se a guardar uma pequena quantidade de dados relacionados à UI. Para guardar dados mais complexos ou de maior volume, deve-se usar outros mecanismos, como Room Database ou DataStore.