Tombstoning v MVVMCross se týká procesu ukládání a obnovy stavu viewModel, když je aplikace pozastavena nebo ukončena kvůli nízkým podmínkám paměti, což je společný scénář v mobilních platformách, jako je Windows Phone a Android. MVVMCross poskytuje mechanismy pro efektivní zpracování tohoto procesu.
Stavba a životní cyklus
MVVMCross ViewModels jsou instalovány pomocí kontejneru IOC, který vkládá závislosti do viewModel. Životní cyklus ViewModel v MVVMCross obsahuje několik klíčových metod:
- Konstrukce: ViewModel je vytvořen se závislostí vstřikovanými prostřednictvím kontejneru IOC.
- init (): inicializuje ViewModel s navigačními parametry.
- RecoadState (): Obnoví stav ViewModel po hrobce.
- Start (): Volán při inicializaci a rehydrataci jsou kompletní [3].
Saving State
Když je aplikace náhrobek, MVVMCross volá metodu `arestateTobundleho na ViewModel. Tato metoda umožňuje uložit stav vašeho ViewModel uložením dat do `imvxBundle`. Pro skladování komplexních dat je vhodné použít serializaci JSON [1].
Obnovení stavu
Poté, co je aplikace reaktivována, se MVVMCross pokusí obnovit stav ViewModel. Přesná metoda pro obnovu stavu se však může lišit v závislosti na platformě a verzi MVVMCross. Metoda `reloadState` se obecně používá k rehydrataci viewmodel s uloženým stavem [3].
Platform-specific Aspectrations
Každá platforma podporovaná MVVMCross zpracovává náhrobky jinak:
- Windows Phone: TombStoning se zpracovává prostřednictvím událostí stránek, jako je `onnavigatedto` a` onnavigated from`. MVVMCross poskytuje mechanismy pro uložení a obnovení stavu během těchto událostí, ale může vyžadovat další nastavení, aby bylo zajištěno správné obnovení stavu [4] [5].
- Android: MVVMCross zpracovává náhrobku uložením a obnovením stavu ViewModel, když je aplikace pozastavena nebo obnovena. Problémy však mohou nastat, pokud je backstack vymazán nebo pokud nejsou navigační parametry správně uloženy [6].
Výzvy a řešení
Manipulace s náhrobkem v MVVMCross může být náročné, zejména při navigaci s parametry. Je zásadní uložit navigační parametry spolu se stavem ViewModel, aby se zajistilo správné obnovení stavu aplikace [6] [9]. Navíc použití pomocných knihoven nebo vlastních řešení může zjednodušit proces ukládání a obnovy stavu na různých platformách [5] [8].
Stručně řečeno, MVVMCross poskytuje robustní rámec pro manipulaci s náhrobkem uložením a obnovením stavu ViewModel. Vyžaduje však pečlivé implementaci a zvážení nuancí specifických pro platformu, aby bylo zajištěno bezproblémové obnovy aplikací.
Citace:[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
[5] https://www.kenneth-truyers.net/2013/03/13/tombstoning-made-asy-in-inwindows-phone-mvvm/
[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/