يشير Tombstoning في MVVMcross إلى عملية توفير واستعادة حالة ViewModel عند تعليق التطبيق أو إنهاءه بسبب ظروف الذاكرة المنخفضة ، وهو سيناريو مشترك في منصات متنقلة مثل Windows Phone و Android. يوفر MVVMCROSS آليات للتعامل مع هذه العملية بفعالية.
البناء ودورة الحياة
يتم إنشاء مثيل لـ MVVMcross ViewModels باستخدام حاوية IOC ، والتي تضخ التبعيات في ViewModel. تتضمن دورة حياة ViewModel في MVVMCross عدة طرق رئيسية:
- البناء: يتم إنشاء ViewModel مع تبعيات تم حقنها عبر حاوية IOC.
- init (): تهيئة ViewModel مع معلمات التنقل.
- RELOADSTATE (): يستعيد حالة ViewModel بعد Tombstoning.
- start (): تسمى عند التهيئة و rehydration كاملة [3].
إنقاذ الدولة
عندما يتم تطبيق التطبيق ، يستدعي MVVMCross طريقة "SaveStatetObundle" على ViewModel. تتيح لك هذه الطريقة حفظ حالة ViewModel الخاصة بك عن طريق تخزين البيانات في `imvxbundle". من المستحسن استخدام تسلسل JSON لتخزين البيانات المعقدة [1].
استعادة الحالة
بعد إعادة تنشيط التطبيق ، يحاول MVVMcross استعادة حالة ViewModel. ومع ذلك ، يمكن أن تختلف الطريقة الدقيقة لاستعادة الحالة اعتمادًا على النظام الأساسي وإصدار MVVMCROSS. بشكل عام ، يتم استخدام طريقة `adadstate` لإعادة ترطيب iewmodel مع الحالة المحفوظة [3].
اعتبارات خاصة منصة
كل منصة تدعمها MVVMcross تتولى Tombstoning بشكل مختلف:
- Windows Phone: يتم التعامل مع Tombstoning من خلال أحداث صفحات مثل `onnavigatedto` و `onnavigatedfrom`. يوفر MVVMCROSS آليات لتوفير واستعادة الحالة خلال هذه الأحداث ، ولكن قد يتطلب إعدادًا إضافيًا لضمان استعادة الحالة المناسبة [4] [5].
- Android: MVVMCross يتعامل مع Tombstoning من خلال توفير واستعادة حالة ViewModel عند إيقاف التطبيق أو استئنافه. ومع ذلك ، يمكن أن تنشأ المشكلات إذا تم مسح الخلفية أو إذا لم يتم حفظ معلمات التنقل بشكل صحيح [6].
التحديات والحلول
يمكن أن يكون التعامل مع Tombstoning في 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-tombstoning
[5]
[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/