Tombstoning in MVVMCRoss si riferisce al processo di salvataggio e ripristino dello stato di un punto di vista quando un'applicazione è sospesa o terminata a causa di basse condizioni di memoria, uno scenario comune in piattaforme mobili come Windows Phone e Android. MVVMCRoss fornisce meccanismi per gestire questo processo in modo efficace.
Construction and Lifecycle
MVVMCRoss ViewModels sono istanziati usando un contenitore IOC, che inietta dipendenze nel ViewModel. Il ciclo di vita di un ViewModel in MVVMCRoss include diversi metodi chiave:
- Costruzione: ViewModel viene creato con dipendenze iniettate tramite il contenitore IOC.
- init (): inizializza la ViewModel con i parametri di navigazione.
- ReloadState (): ripristina lo stato del ViewModel dopo la tomba.
- start (): chiamato quando l'inizializzazione e la reidratazione sono complete [3].
Stato di salvataggio
Quando un'applicazione viene tombata, MVVMCROSS chiama il metodo `SaveStateTobundle` sul ViewModel. Questo metodo ti consente di salvare lo stato del tuo ViewModel memorizzando i dati in un "imvxbundle". Si consiglia di utilizzare la serializzazione JSON per archiviare dati complessi [1].
Restoring State
Dopo che l'applicazione è stata riattivata, MVVMCRoss tenta di ripristinare lo stato di ViewModel. Tuttavia, il metodo esatto per il ripristino dello stato può variare a seconda della piattaforma e della versione di MVVMCRoss. In generale, il metodo `ReloadState` viene utilizzato per reidratare il ViewModel con lo stato salvato [3].
Considerazioni specifiche per la piattaforma ###
Ogni piattaforma supportata da MVVMCRoss gestisce in modo diverso:
- Windows Phone: la tomba viene gestita attraverso eventi di pagina come `onnavigatedto` e` onnavigatedfrom`. MVVMCRoss fornisce meccanismi per salvare e ripristinare lo stato durante questi eventi, ma potrebbe richiedere una configurazione aggiuntiva per garantire un adeguato ripristino dello stato [4] [5].
- Android: MVVMCRoss gestisce la tomba salvando e ripristinando lo stato di ViewModel quando l'applicazione viene messa in pausa o ripresa. Tuttavia, possono sorgere problemi se il backstack viene cancellato o se i parametri di navigazione non vengono salvati correttamente [6].
sfide e soluzioni
La gestione della tomba in mvvmcross può essere impegnativa, soprattutto quando si naviga con i parametri. È fondamentale salvare i parametri di navigazione insieme allo stato ViewModel per garantire il corretto ripristino dello stato dell'applicazione [6] [9]. Inoltre, l'utilizzo di librerie helper o soluzioni personalizzate può semplificare il processo di salvataggio e ripristino dello stato su piattaforme diverse [5] [8].
In sintesi, MVVMCROSS fornisce un quadro robusto per la gestione di tombi salvando e ripristinando lo stato di ViewModel. Tuttavia, richiede un'attenta implementazione e considerazione delle sfumature specifiche della piattaforma per garantire il recupero di applicazione senza soluzione di continuità.
Citazioni:[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-easy-in-windows-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/