Sobes.tech
Junior

Como podemos temporariamente guardar um objeto no Android?

sobes.tech IA

Resposta da IA

É possível guardar temporariamente um objeto no Android de várias maneiras, a escolha depende da sua duração e da necessidade de acesso após a componente terminar:

  • Estado da View: Os objetos relacionados com a View podem ser guardados no seu estado, que é restaurado ao recriar a View (por exemplo, ao rodar a tela). Usa-se onSaveInstanceState() e onRestoreInstanceState().
  • ViewModel: A melhor forma de guardar dados relacionados com a interface de utilizador que devem sobreviver a mudanças de configuração da Atividade/Fragmento (por exemplo, rotações de ecrã). ViewModel existe até que o ViewModelStoreOwner seja destruído.
    // Na Atividade/Fragmento
    val viewModel = ViewModelProvider(this).get(MyViewModel::class.java)
    
    // No ViewModel
    class MyViewModel : ViewModel() {
        var myObject: MyData? = null
    }
    
  • onRetainCustomNonConfigurationInstance() (obsoleto): Método na Atividade para guardar objetos arbitrários que sobreviverão a mudanças de configuração. getLastNonConfigurationInstance() é usado para obter o objeto. Obsoleto em favor de ViewModel.
    // Na Atividade
    override fun onRetainCustomNonConfigurationInstance(): Any? {
        return myObjectToRetain
    }
    
    // Obter o objeto
    val retainedObject = lastCustomNonConfigurationInstance as? MyData
    
  • Classe Application: Para objetos que devem viver durante todo o ciclo de vida da aplicação. Deve ser usado com cuidado para não guardar demasiados dados.
  • Ficheiros temporários: Para objetos maiores que não cabem diretamente na memória ou que requerem armazenamento temporário no disco.
Método Duração de vida Uso
Estado da View Vida da View + mudanças Dados pequenos relacionados com a View
ViewModel Vida da Atividade/Fragmento Dados de UI que sobrevivem a mudanças de configuração
onRetainCustomNonConfigurationInstance() Vida da Atividade + mudanças Objetos arbitrários (obsoleto)
Classe Application Vida da aplicação Objetos globais
Ficheiros temporários Definido pelo desenvolvedor Objetos grandes, armazenamento temporário