Hoe implementeert Android het mechanisme voor het bewaren van de staat van ViewModel tijdens configuratiewijzigingen of in de levenscyclus?
sobes.tech AI
Antwoord van AI
In Android is het ViewModel bedoeld om UI-gegevens op te slaan en te beheren met inachtneming van de levenscyclus. Bij configuratiewijzigingen (bijvoorbeeld schermrotatie) vernietigt het systeem de Activity of Fragment, maar het ViewModel blijft behouden en wordt opnieuw toegewezen aan nieuwe instanties.
Dit wordt bereikt via ViewModelProvider, dat het ViewModel aan de levenscyclus van het component koppelt. Het ViewModel blijft in het geheugen zolang het verbonden is met de levenscyclus van de eigenaar (Activity/Fragment). Wanneer een component wordt vernietigd vanwege een configuratiewijziging, wordt het ViewModel niet vernietigd, maar hergebruikt in een nieuwe instantie.
Om de staat binnen het ViewModel op te slaan, kan SavedStateHandle worden gebruikt, een speciaal object dat het opslaan en herstellen van gegevens mogelijk maakt in geval van procesvernietiging of andere situaties die verder gaan dan een eenvoudige configuratiewijziging.
Voorbeeld van gebruik van SavedStateHandle:
class MyViewModel(private val state: SavedStateHandle) : ViewModel() {
var counter: Int
get() = state.get<Int>("counter") ?: 0
set(value) = state.set("counter", value)
}
Op deze manier bewaart het ViewModel gegevens in het geheugen tijdens configuratiewijzigingen, en helpt SavedStateHandle om de staat te behouden bij ernstigere gebeurtenissen, zoals het vernietigen van het proces.