Sobes.tech
Junior

Cum putem salva temporar un obiect în Android?

sobes.tech AI

Răspuns de la AI

Este posibil să salvați temporar un obiect în Android în mai multe moduri, alegerea depinde de durata sa de viață și de necesitatea de a avea acces la el după ce componenta a fost finalizată:

  • Starea View: Obiectele legate de View pot fi salvate în starea sa, care este restaurată atunci când View este recreată (de exemplu, la rotirea ecranului). Se utilizează onSaveInstanceState() și onRestoreInstanceState().
  • ViewModel: Cea mai bună metodă de a salva datele legate de UI, care trebuie să supraviețuiască schimbărilor de configurație ale Activity/Fragment (de exemplu, rotiri de ecran). ViewModel există până când ViewModelStoreOwner este distrus.
    // În Activity/Fragment
    val viewModel = ViewModelProvider(this).get(MyViewModel::class.java)
    
    // În ViewModel
    class MyViewModel : ViewModel() {
        var myObject: MyData? = null
    }
    
  • onRetainCustomNonConfigurationInstance() (învechit): Metodă în Activity pentru salvarea obiectelor arbitrare care vor supraviețui schimbărilor de configurație. getLastNonConfigurationInstance() este utilizat pentru a obține obiectul. Învechit în favoarea ViewModel.
    // În Activity
    override fun onRetainCustomNonConfigurationInstance(): Any? {
        return myObjectToRetain
    }
    
    // Obținerea obiectului
    val retainedObject = lastCustomNonConfigurationInstance as? MyData
    
  • Clasa Application: Pentru obiecte care trebuie să trăiască pe durata întregului ciclu de viață al aplicației. Trebuie utilizată cu prudență pentru a nu stoca prea multe date.
  • Fișiere temporare: Pentru obiecte mai mari care nu încap direct în memorie sau necesită salvare temporară pe disc.
Metodă Durata de viață Utilizare
Starea View Viața View + recreare Date mici legate de View
ViewModel Viața Activity/Fragmentului Date UI, care supraviețuiesc schimbărilor de configurație
onRetainCustomNonConfigurationInstance() Viața Activity + schimbări Obiecte arbitrare (învechit)
Clasa Application Viața aplicației Obiecte globale
Fișiere temporare Determinat de dezvoltator Obiecte mari, stocare temporară