Tombstoning i MVVMCross henviser til processen med at spare og gendanne tilstanden af en ViewModel, når en applikation suspenderes eller afsluttes på grund af lave hukommelsesforhold, et almindeligt scenario i mobile platforme som Windows Phone og Android. MVVMCROSS leverer mekanismer til at håndtere denne proces effektivt.
Konstruktion og livscyklus
MVVMCross ViewModels er instantieret ved hjælp af en IOC -beholder, der indsprøjter afhængigheder i ViewModel. Livscyklussen for en ViewModel i MVVMCross inkluderer flere nøglemetoder:
- Konstruktion: ViewModel er oprettet med afhængigheder, der er injiceret via IOC -beholderen.
- init (): Initialiserer ViewModel med navigationsparametre.
- genadstat (): gendanner visningen af ViewModel efter Tombstoning.
- Start (): kaldet, når initialisering og rehydrering er komplet [3].
Savende tilstand
Når en applikation er Tombstoned, kalder MVVMCROSS 'SavestateToTObundle' -metoden på ViewModel. Denne metode giver dig mulighed for at gemme tilstanden for din ViewModel ved at gemme data i en `imvxbundle '. Det tilrådes at bruge JSON -serialisering til lagring af komplekse data [1].
Restoring af staten
Efter at applikationen er genaktiveret, forsøger MVVMCross at gendanne ViewModel's tilstand. Imidlertid kan den nøjagtige metode til gendannelse af tilstand variere afhængigt af platformen og versionen af MVVMCross. Generelt bruges metoden `ReloadState` til at rehydrere ViewModel med den gemte tilstand [3].
Platformspecifikke overvejelser
Hver platform understøttet af MVVMCross håndterer gravstoning forskelligt:
- Windows Phone: Tombstoning håndteres gennem sidebegivenheder som `onnavigatedto` og` onnavigated from`. MVVMCROSS leverer mekanismer til at gemme og gendanne tilstand under disse begivenheder, men det kan kræve yderligere opsætning for at sikre korrekt statslige restaurering [4] [5].
- Android: MVVMCross håndterer gravstoning ved at gemme og gendanne ViewModel -staten, når applikationen er sat på pause eller genoptaget. Imidlertid kan der opstå problemer, hvis backstack ryddes, eller hvis navigationsparametre ikke gemmes korrekt [6].
Udfordringer og løsninger
Håndtering af gravstoning i MVVMCross kan være udfordrende, især når man navigerer med parametre. Det er vigtigt at gemme navigationsparametre sammen med ViewModel -tilstand for at sikre korrekt restaurering af applikationens tilstand [6] [9]. Derudover kan brug af hjælperbiblioteker eller brugerdefinerede løsninger forenkle processen med at spare og gendanne tilstand på tværs af forskellige platforme [5] [8].
Sammenfattende giver MVVMCROSS en robust ramme til håndtering af gravstoning ved at redde og gendanne ViewModel State. Det kræver dog omhyggelig implementering og overvejelse af platformspecifikke nuancer for at sikre problemfri applikationsinddrivelse.
Citater:[1] https://www.mvvmcross.com/documentation/fundamentals/viewmodel-lifecycle
[2] https://www.mvvmcross.com/mvvmcross-51-release/
[3] https://stackoverflow.com/questions/29372480/mvvmcross-viewmodel-life-cycle
[4] https://stackoverflow.com/questions/16023307/mvvmcross-and-tombstoning
)
[6] https://github.com/mvvmcross/mvvmcross/issues/834
[7] https://github.com/mvvmcross/mvvmcross/blob/develop/changelog.md
[8] https://jesseliberty.com/2011/04/08/tombstoning-and-mvvm/
[9] https://github.com/mvvmcross/mvvmcross/issues/2458
[10] https://www.mvvmcross.com/mvvmcross-56-release/