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.