Sobes.tech
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() en onRestoreInstanceState() worden gebruikt.
  • ViewModel: De beste manier om UI-gerelateerde gegevens op te slaan die de configuratiewijzigingen van Activity/Fragment moeten overleven (bijvoorbeeld schermrotaties). ViewModel bestaat tot dat de ViewModelStoreOwner wordt 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 van ViewModel.
    // In Activity
    override fun onRetainCustomNonConfigurationInstance(): Any? {
        return myObjectToRetain
    }
    
    // Object verkrijgen
    val retainedObject = lastCustomNonConfigurationInstance as? MyData
    
  • Application klasse: 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