Tombstoning в MVVMCross відноситься до процесу економії та відновлення стану ViewModel, коли додаток призупиняється або припиняється через низькі умови пам'яті, загальний сценарій на мобільних платформах, таких як Windows Phone та Android. MVVMCross забезпечує механізми для ефективного поводження з цим процесом.
Конструкція та життєвий цикл
MVVMCROSS ViewModels інстанціюється за допомогою контейнера IOC, який вводить залежності в ViewModel. Життєвий цикл ViewModel в MVVMcross включає кілька ключових методів:
- Конструкція: ViewModel створюється з залежністю, що вводиться через контейнер МОК.
- init (): ініціалізує ViewModel з параметрами навігації.
- reloadState (): Відновлює стан ViewModel після покоління.
- start (): називається, коли ініціалізація та регідратація завершені [3].
Збереження стану
Коли додаток надягається, MVVMCross викликає метод `SavestateToBundle` на ViewModel. Цей метод дозволяє зберегти стан вашої ViewModel, зберігаючи дані в `imvxbundle`. Доцільно використовувати серіалізацію JSON для зберігання складних даних [1].
Відновлення стану
Після реактивації програми MVVMCross намагається відновити стан ViewModel. Однак точний метод відновлення стану може змінюватись залежно від платформи та версії MVVMCross. Взагалі метод `reloadstate` використовується для регідратування ViewModel із збереженим станом [3].
Платформа-міркування
Кожна платформа, що підтримується MVVMcross по -різному поводиться з Tombstoning:
- Windows Phone: Tombstoning здійснюється через події сторінки, такі як `onnavigatedto` та` onnavigated from`. MVVMCross забезпечує механізми збереження та відновлення стану під час цих подій, але для забезпечення належної відновлення стану [4] [5].
- Android: MVVMcross обробляє Tombstoning, зберігаючи та відновлюючи стан ViewModel, коли програма призупинена або відновиться. Однак проблеми можуть виникнути, якщо зворотна коробка очищена або якщо параметри навігації не є належним чином збереженими [6].
виклики та рішення
Поводження з суми в MVVMCross може бути складним завданням, особливо при навігації з параметрами. Важливо зберегти параметри навігації разом із станом ViewModel, щоб забезпечити правильне відновлення стану програми [6] [9]. Крім того, використання помічників бібліотек або спеціальних рішень може спростити процес збереження та відновлення стану на різних платформах [5] [8].
Підводячи підсумок, MVVMCross забезпечує надійну основу для поводження з Tombstoning, рятуючи та відновлюючи стан ViewModel. Однак це вимагає ретельного впровадження та врахування нюансів, що стосуються платформи, для забезпечення безперебійного відновлення додатків.
Цитати:[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-tombstoninging
[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/devell/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/