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()șionRestoreInstanceState(). 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).ViewModelexistă până cândViewModelStoreOwnereste 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 favoareaViewModel.// Î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ă |