Wat is het verschil tussen het opslaan van gegevens in ViewModel en het gebruik van de methode onSaveInstanceState om de toestand van de applicatie op te slaan?
sobes.tech AI
Antwoord van AI
ViewModel en onSaveInstanceState dienen om de staat op te slaan, maar ze werken op verschillende manieren en zijn voor verschillende doeleinden.
-
ViewModel slaat gegevens op in het geheugen dat gekoppeld is aan de levenscyclus van een Activity of Fragment. Het overleeft schermrotaties en andere configuratiewijzigingen door de gegevens te behouden zonder ze opnieuw te laden. Echter, wanneer het proces van de app volledig wordt beëindigd (bijvoorbeeld door geheugenbeperkingen), gaan de gegevens van de ViewModel verloren.
-
onSaveInstanceState slaat kleine gegevens op in een Bundle-object, dat wordt geserialiseerd en door het systeem wordt hersteld bij het opnieuw maken van de Activity na het beëindigen van het proces. Deze methode is geschikt voor het opslaan van eenvoudige en kleine gegevens (zoals UI-toestand), maar niet voor grote hoeveelheden of complexe objecten.
Voorbeeld:
class MyViewModel : ViewModel() {
var userData: String? = null
}
// In de Activity
val viewModel = ViewModelProvider(this).get(MyViewModel::class.java)
// onSaveInstanceState
override fun onSaveInstanceState(outState: Bundle) {
super.onSaveInstanceState(outState)
outState.putString("key", "value")
}
// Herstel in onCreate
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val value = savedInstanceState?.getString("key")
}
Kort samengevat:
- Gebruik ViewModel om gegevens op te slaan die een rotatie van het scherm moeten overleven.
- Gebruik onSaveInstanceState om de toestand op te slaan die je wilt herstellen na volledige vernietiging van de Activity of het proces.