Sobes.tech
Junior — Middle

Qual é a diferença entre armazenar dados no ViewModel e usar o método onSaveInstanceState para salvar o estado da aplicação?

sobes.tech IA

Resposta da IA

O ViewModel e o onSaveInstanceState servem para guardar o estado, mas funcionam de forma diferente e destinam-se a diferentes propósitos.

  • ViewModel armazena dados na memória vinculada ao ciclo de vida da Activity ou Fragment. Sobrevive a rotações de tela e outras alterações de configuração, mantendo os dados sem necessidade de recarregá-los. No entanto, quando o processo da aplicação é completamente destruído (por exemplo, por falta de memória), os dados do ViewModel são perdidos.

  • onSaveInstanceState guarda pequenos dados num objeto Bundle, que é serializado e restaurado pelo sistema ao recriar a Activity após a destruição do processo. Este método é adequado para guardar dados simples e pequenos (como o estado da UI), mas não para grandes volumes ou objetos complexos.

Exemplo:

class MyViewModel : ViewModel() {
    var userData: String? = null
}

// Na Activity
val viewModel = ViewModelProvider(this).get(MyViewModel::class.java)

// onSaveInstanceState
override fun onSaveInstanceState(outState: Bundle) {
    super.onSaveInstanceState(outState)
    outState.putString("key", "value")
}

// Restauração no onCreate
override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    val value = savedInstanceState?.getString("key")
}

Resumindo:

  • Use o ViewModel para guardar dados que devem sobreviver à rotação da tela.
  • Use onSaveInstanceState para guardar o estado que deseja restaurar após a destruição completa da Activity ou do processo.