Sobes.tech
Junior

Come possiamo salvare temporaneamente un oggetto in Android?

sobes.tech AI

Risposta dell'AI

È possibile salvare temporaneamente un oggetto in Android in diversi modi, la scelta dipende dalla sua durata e dalla necessità di accedervi dopo che il componente ha terminato:

  • Stato della View: Gli oggetti associati alla View possono essere salvati nel suo stato, che viene ripristinato quando la View viene ricreata (ad esempio, durante la rotazione dello schermo). Si usano onSaveInstanceState() e onRestoreInstanceState().
  • ViewModel: Il modo migliore per salvare dati legati all'UI che devono sopravvivere ai cambiamenti di configurazione di Activity/Fragment (ad esempio, rotazioni dello schermo). ViewModel esiste fino a che il ViewModelStoreOwner viene distrutto.
    // In Activity/Fragment
    val viewModel = ViewModelProvider(this).get(MyViewModel::class.java)
    
    // In ViewModel
    class MyViewModel : ViewModel() {
        var myObject: MyData? = null
    }
    
  • onRetainCustomNonConfigurationInstance() (obsoleto): Metodo in Activity per salvare oggetti arbitrari che sopravvivono ai cambiamenti di configurazione. getLastNonConfigurationInstance() viene usato per ottenere l'oggetto. Obsoleto in favore di ViewModel.
    // In Activity
    override fun onRetainCustomNonConfigurationInstance(): Any? {
        return myObjectToRetain
    }
    
    // Per ottenere l'oggetto
    val retainedObject = lastCustomNonConfigurationInstance as? MyData
    
  • Classe Application: Per oggetti che devono vivere per tutta la durata dell'applicazione. Si dovrebbe usare con cautela per non conservare troppi dati.
  • File temporanei: Per oggetti più grandi che non entrano direttamente in memoria o che richiedono salvataggio temporaneo su disco.
Metodo Durata della vita Uso
Stato della View Vita della View + ricreazione Dati piccoli legati alla View
ViewModel Vita di Activity/Fragment Dati UI che sopravvivono ai cambiamenti di configurazione
onRetainCustomNonConfigurationInstance() Vita di Activity + ricreazione Oggetti arbitrari (obsoleto)
Classe Application Vita dell'applicazione Oggetti globali
File temporanei Definiti dallo sviluppatore Oggetti grandi, archiviazione temporanea