Junior
Hoe kunnen we een object tijdelijk opslaan in Android?
sobes.tech AI
Antwoord van AI
Het is mogelijk om objecten tijdelijk op te slaan in Android op verschillende manieren, de keuze hangt af van de levensduur ervan en de behoefte om er na afloop toegang toe te hebben:
- View-Status: Objecten die gerelateerd zijn aan een View kunnen worden opgeslagen in de staat ervan, die wordt hersteld bij het opnieuw maken van de View (bijvoorbeeld bij schermrotatie).
onSaveInstanceState()enonRestoreInstanceState()worden gebruikt. ViewModel: De beste manier om UI-gerelateerde gegevens op te slaan die de configuratiewijzigingen van Activity/Fragment moeten overleven (bijvoorbeeld schermrotaties).ViewModelbestaat tot dat deViewModelStoreOwnerwordt vernietigd.// In Activity/Fragment val viewModel = ViewModelProvider(this).get(MyViewModel::class.java) // In ViewModel class MyViewModel : ViewModel() { var myObject: MyData? = null }onRetainCustomNonConfigurationInstance()(verouderd): Methode in Activity om willekeurige objecten op te slaan die de configuratiewijzigingen overleven.getLastNonConfigurationInstance()wordt gebruikt om het object te verkrijgen. Verouderd ten gunste vanViewModel.// In Activity override fun onRetainCustomNonConfigurationInstance(): Any? { return myObjectToRetain } // Object verkrijgen val retainedObject = lastCustomNonConfigurationInstance as? MyDataApplicationklasse: Voor objecten die de hele levenscyclus van de applicatie moeten doorstaan. Voorzichtig gebruiken om niet te veel gegevens op te slaan.- Tijdelijke bestanden: Voor grotere objecten die niet direct in het geheugen passen of korte termijn op schijf moeten worden opgeslagen.
| Methode | Levensduur | Gebruik |
|---|---|---|
| View-Status | Levensduur van View + hercreatie | Kleine gegevens gerelateerd aan View |
| ViewModel | Levensduur van Activity/Fragment | UI-gegevens die de configuratiewijzigingen overleven |
onRetainCustomNonConfigurationInstance() |
Levensduur van Activity + wijzigingen | Willekeurige objecten (verouderd) |
Application klasse |
Levensduur van de applicatie | Globale objecten |
| Vervroegde bestanden | Door ontwikkelaar bepaald | Grote objecten, tijdelijke opslag |