MVVMCROSS -versies 3.x en 4.x hebben verschillende verschillen met betrekking tot de levenscyclus van het ViewModel, voornamelijk gecentreerd rond hoe viewmodellen worden geconstrueerd, geïnitialiseerd en beheerd.
mvvmcross 3.x
In MVVMCross 3.x volgt de LifeCycle van het ViewModel een reeks bekend als CIRS: Construction, Init (), ReloadState () en Start (). Deze volgorde wordt gebruikt om viewModels te initialiseren en te beheren. Hier is een uitsplitsing:
- Constructie: het ViewModel wordt geïnstantieerd met behulp van de IOC -container, waardoor afhankelijkheidsinjectie mogelijk is. Hier worden diensten en andere afhankelijkheden in het ViewModel geïnjecteerd.
- init (): deze methode wordt gebruikt om navigatieparameters te initialiseren. Het wordt na de constructie aangeroepen en is waar u doorgaans alle initiële gegevens of parameters instelt die aan het ViewModel zijn doorgegeven.
- ReloadState (): deze methode is verantwoordelijk voor het rehydrateren van de status van het ViewModel na tombstonering, die optreedt wanneer de app wordt opgeschort en vervolgens wordt hervat vanwege lage geheugenomstandigheden.
- start (): deze methode wordt aangeroepen wanneer initialisatie en rehydratatie voltooid zijn. Het wordt meestal gebruikt om doorlopende bewerkingen of taken te starten.
mvvmcross 4.x
MVVMCross 4.x blijft de CIRS -volgorde gebruiken, maar introduceert enkele veranderingen en verbeteringen:
- De constructie blijft hetzelfde, met behulp van IOC voor afhankelijkheidsinjectie.
- init () initialiseert nog steeds navigatieparameters, maar is nu flexibeler, waardoor getypte navigatieparameters mogelijk zijn.
- ReloadState () blijft de rehydratatie van de staat afhandelen na tombstonering.
- Start () is vergelijkbaar, maar kan minder vaak worden gebruikt vanwege de introductie van meer asynchrone initialisatiemethoden.
Een significante verandering in MVVMCross 4.x is de voortdurende ondersteuning voor getypte navigatieparameters, waardoor meer gestructureerde gegevens tussen viewmodellen kunnen worden doorgegeven. Bovendien legt MVVMCross 4.x de basis voor toekomstige verbeteringen in navigatie- en levenscyclusbeheer, die verder worden verbeterd in MVVMCross 5.x.
Belangrijkste verschillen
- Navigatieparameters: MVVMCross 3.x geeft navigatieparameters rechtstreeks door aan de methode `init ()`, terwijl MVVMCross 4.x getypte navigatieparameters ondersteunt, waardoor het gemakkelijker wordt om complexe gegevens tussen ViewModels door te geven.
- Lifecycle Flexibiliteit: MVVMCross 4.x biedt meer flexibiliteit bij het omgaan met ViewModel Lifecycles, vooral met de introductie van asynchrone initialisatiemethoden.
- Tombstoning -ondersteuning: beide versies ondersteunen Tombstoning, maar MVVMCross 4.x blijft dit proces verfijnen, zodat viewmodellen hun status effectief kunnen redden en herstellen.
Over het algemeen bouwt MVVMCross 4.x voort op de in 3.x gevestigde basis door het verbeteren van navigatie, levenscyclusbeheer en flexibiliteit bij het verwerken van complexe gegevens en asynchrone bewerkingen.
Citaten:[1] https://www.mvvmcross.com/documentation/fundamentals/viewmodel-lifecycle
[2] https://stackoverflow.com/questions/49322704/mvvmcross-view-model-lifecycle-restore-not-working
[3] https://stackoverflow.com/questions/15961664/viewModel-Lifecycle-wen-does-it-get-Disponped
[4] https://stackoverflow.com/questions/71959649/does-mvvmcross-have-a-built-in-Message-for-viewModel-t-Tell-View-when-viewAppea
[5] https://stackoverflow.com/questions/29372480/mvvmcross-viewmodel-life-cycle
[6] https://www.mvvmcross.com/documentation/advanced/customizing-using-app-and-setup
[7] https://www.mvvmcross.com/documentation/tutorials/tipcalc/a-note-about-views-and-viewmodels
[8] https://www.ramotion.com/blog/whatis-mvvm/
[9] https://www.mvvmcross.com/documentation/fundamentals/navigation
[10] https://www.mvvmcross.com/documentation/fundamentals/inversion-of-control-ioc
[11] https://www.mvvmcross.com/documentation/getting-started/mvvmcross-overview
[12] https://github.com/mvvmcross/mvvmcross/issues/2738