Az MVVMCross az alacsony memóriahelyzeteket kezeli a különböző platformokon, olyan mechanizmusok biztosításával, amelyek menthetik és helyreállítják a ViewModels állapotát, ami elengedhetetlen az alkalmazás stabilitásának fenntartásához, ha a memória korlátozott. Így kezeli ezeket a helyzeteket a különböző platformokon:
Az mvvmcross áttekintése
Az MVVMCross egy platformok közötti MVVM keretrendszer, amely támogatja a Windows Phone, a Windows 8, az IOS, az Android és a WPF alkalmazásokat. Ez lehetővé teszi a fejlesztők számára, hogy az MVVM mintát ezen platformon keresztül valósítsák meg, megkönnyítve az adatkötést és az aggodalmak elválasztását [2] [5]. A keret egy hordozható osztálykönyvtárat (PCL) használ a ViewModels házhoz, lehetővé téve számukra, hogy megosszák őket a különböző platformokon [5].
Az alacsony memóriahelyzetek kezelése
Android **
Az Androidon az MVVMCross kihívásokkal szembesül a platform életciklusának és a memóriakezelésnek köszönhetően. Az Android életciklusa olyan helyzetekhez vezethet, amikor a ViewModels nem kerül ártalmatlanításra azonnal, miután a kapcsolódó nézeteket megsemmisítették. Ennek oka az, hogy a Xamarin szemétgyűjteménye nem fordul elő azonnal, különösen, ha a memória használata nem magas [4]. Ennek kezelése érdekében a fejlesztők olyan eseményeket használhatnak, mint a „ViewPearing” és a „ViewDiSpearing” az üzenetek leiratkozásának leiratkozása és annak biztosítása érdekében, hogy csak a ViewModels szükséges példányok maradjanak aktívak [4].
iOS **
Míg az MVVMCross nem kezeli közvetlenül az iOS-specifikus alacsony memória figyelmeztetéseket, a fejlesztők platformspecifikus megoldásokat tudnak megvalósítani. Például egy .NET Maui alkalmazásban (amely a koncepcióhoz hasonló a platformok közötti keretekhez, mint például az MVVMCross), felülbírálhatja az „ApplicationDidreevememoryWarning” alkalmazást az alkalmazás delegációjában az erőforrások megtisztításához [3]. Maga az MVVMCross azonban nem biztosít beépített mechanizmust az iOS-ra vonatkozó figyelmeztetések kezelésére.
Windows Phone és más platformok **
A Windows Phone és más platformok esetében az MVVMCross általános megközelítést biztosít a memória kezelésére, lehetővé téve a fejlesztők számára, hogy az oldalszintű eseményeket, például a „Onnavigatedto” és a „OnnavigatedFrom” megfigyelését figyeljék meg. Ezek az események felhasználhatók az egyéni logika megvalósításához az erőforrások felszabadításához szükség esetén [8].
A ViewModel állapot megtakarítása és visszaállítása
Az MVVMCross a „SaveStateBundle” elnevezésű módszert biztosít a „MvxViewModel” osztályban, amely lehetővé teszi a fejlesztők számára, hogy megmentsék a ViewModels állapotát, amikor az alkalmazás sírstonált vagy alacsony memóriahelyzetekkel szembesül. Ez az állapot később helyreállítható, amikor az alkalmazás folytatódik, biztosítva, hogy a felhasználó előrehaladása megőrizze [1]. Ez a szolgáltatás különösen hasznos olyan platformokon, mint az Android, ahol az alkalmazás állapotát a memória korlátozása miatt gyakran menthetik és helyreállíthatják.
Összefoglalva: míg az MVVMCross nem biztosít minden platformon platformspecifikus alacsony memóriakezelő mechanizmusokat, eszközöket kínál a ViewModel állapot kezelésére, és olyan keretet kínál, amely lehetővé teszi a fejlesztők számára, hogy az egyes platformok egyedi igényei alapján egyedi megoldásokat hajtsanak végre.
Idézetek:[1] https://www.mvvmcross.com/documentation/fundamentals/viewmodel-lifecycle
[2] https://learn.microsoft.com/en-us/archive/msdn-magazine/2014/august/windows-phone-build-mvvm-apps-with-xamarin-and-mvvmcross
[3] https://learn.microsoft.com/en-us/answers/questions/1360447/net-maui-how-do-you-process-low-memory-notificatio
[4] https://stackoverflow.com/questions/54040726/mvvmcross-droid-pears-to-he-e-e-e-wond-of-viewmodels-and-never-disposing-w-w-w-w
[5] https://leaware.com/creating-cross-platform-xamarin-pplications-Uning-the-mvvmcross-framework/
[6] https://stackoverflow.com/questions/32220007/what-does-mvvmcross-do-that-xamarin-doesnt-already
[7] https://www.reddit.com/r/dotnetmaui/comments/1c1qlou/maui_memory_leaks/
[8] https://stackoverflow.com/q/19817284
[9] https://www.mvvmcross.com/documentation/getting-started/mvvmcross-overview
[10] https://www.hasaltaiar.com.au/a-journey-of-hunting-memory-wamarin-2/