„MVVMCross“ tvarko žemas atminties situacijas skirtingose platformose, pateikdama mechanizmus, kaip išsaugoti ir atkurti „ViewModels“ būseną, kuri yra labai svarbi norint išlaikyti taikymo stabilumą, kai atmintis yra ribota. Štai kaip tai valdo šias situacijas įvairiose platformose:
„MVVMCross“ apžvalga
„MVVMCross“ yra įvairių platformų MVVM sistema, palaikanti „Windows Phone“, „Windows 8“, „iOS“, „Android“ ir WPF programas. Tai leidžia kūrėjams įgyvendinti MVVM modelį šiose platformose, palengvinant duomenų įrišimą ir rūpesčių atskyrimą [2] [5]. Framewore naudojama nešiojama klasių biblioteka (PCL), kad būtų galima apgyvendinti „ViewModels“, leidžiančią jas bendrinti įvairiose platformose [5].
Žemos atminties situacijų tvarkymas
„Android“ **
„Android“ „MVVMCross“ susiduria su iššūkiais dėl platformos gyvavimo ciklo ir atminties valdymo. „Android“ gyvavimo ciklas gali sukelti situacijas, kai „ViewModels“ nėra išmetami iškart po to, kai jų susiję vaizdai bus sunaikinti. Taip yra todėl, kad „Xamarin“ šiukšlių rinkimas gali būti ne iš karto, ypač jei atminties naudojimas nėra didelis [4]. Norėdami tai valdyti, kūrėjai gali naudoti tokius įvykius, kaip „ViewApeing“ ir „ViewDisAppeing“, kad atsisakyti pranešimų prenumeratos ir užtikrintų, kad tik būtini „ViewModels“ egzemplioriai išliks aktyvūs [4].
iOS **
Nors „MVVMCross“ tiesiogiai nežiūri į „iOS“ specifinius žemos atminties įspėjimus, kūrėjai gali įdiegti konkrečiai platformai būdingus sprendimus. Pvz., „.NET Maui“ programoje (kuri yra panaši į įvairių platformų rėmų, tokių kaip „MVVMCross“), „ApplicationDidReceiveVemoryWarning“ galite nepaisyti „ApplicativeDReceiveVemoryWarning“, kad išvalytumėte išteklius [3]. Tačiau pats MVVMCross nepateikia įmontuoto šių įspėjimų tvarkymo mechanizmo „iOS“.
„Windows Phone“ ir kitos platformos **
„Windows Phone“ ir kitoms platformoms „MVVMCross“ pateikia bendrą požiūrį į atminties valdymą, leisdama kūrėjams stebėti puslapio lygio įvykius, tokius kaip „onnavigatedto“ ir „onnavigated offrom“. Šie įvykiai gali būti naudojami pritaikytai logikai, skirtai išteklių išlaisvinimui, kai reikia [8].
„ViewModel“ būsenos taupymas ir atkūrimas
„MVVMCross“ pateikia metodą, vadinamą „SavestateToBundle“ klasėje „MVXViewModel“, kuris leidžia kūrėjams išsaugoti savo „ViewModels“ būseną, kai programa yra antkapinė arba susiduria su žemos atminties situacijomis. Šią būseną galima atkurti vėliau, kai programa atnaujins, užtikrinant, kad vartotojo pažanga būtų išsaugota [1]. Ši funkcija yra ypač naudinga tokiose platformose kaip „Android“, kur programos būsena gali būti išsaugota ir dažnai atstatyta dėl atminties apribojimų.
Apibendrinant galima pasakyti, kad nors „MVVMCross“ nepateikia platformai būdingų žemos atminties tvarkymo mechanizmų kiekvienai platformai, jis siūlo įrankius, skirtus valdyti „ViewModel“ būseną, ir suteikia sistemą, leidžiančią kūrėjams įgyvendinti pasirinktinius sprendimus, atsižvelgiant į specifinius kiekvienos platformos poreikius.
Citatos:[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-notifatio
[4] https://stackoverflow.com/questions/54040726/mvvmcross-android-apears-to--neep-keep-hold-of-viewmodels ir never-sisposing-w
[5] https://leaware.com/creating-cross-platform-xamarin-application-sing-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-ememory-reaks-in-xamarin-2/