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()eonRestoreInstanceState(). 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ã).ViewModelexiste até que oViewModelStoreOwnerseja 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 deViewModel.// 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 |