„MVVMCross“ gyvenimo ciklo įvykiai daro didelę įtaką „ViewModels“ elgesiui, pateikiant struktūrizuotą būdą valdyti savo būseną ir sąveiką su vaizdu. Čia pateikiama išsami apžvalga, kaip šie gyvavimo ciklo įvykiai daro įtaką „ViewModel“ elgesiui:
Statyba ir inicijavimas
- Konstrukcija: „MVVMCross“ akimirksniu naudoja „ViewModel“, naudodamas savo IOC konteinerį, švirkščiant priklausomybes, nurodytas „ViewModel“ konstruktoriuje. Tai užtikrina, kad sukuriant „ViewModel“ yra prieinamos visos reikalingos paslaugos [1] [2].
- Inicijavimas: „init“ metodas naudojamas navigacijos parametrams perduoti į „ViewModel“. Tai yra pageidautinas būdas inicijuoti duomenis „ViewModel“, leidžiantį nustatyti savo vidinę būseną, remiantis gautais parametrais [2].
Gyvenimo ciklo metodai
Pradedant nuo „MVVMCross 5.0“, „ViewModels“ yra sandariai sujungti su atitinkamų vaizdų gyvavimo cikle. Tai reiškia, kad „ViewModels“ turi prieigą prie kelių gyvavimo ciklo metodų, atspindinčių konkrečiai platformos rodinio įvykius:
- „View Create“: paskambinta, kai sukuriamas vaizdas. Šis metodas gali būti naudojamas atliekant sąrankos užduotis, kuriose reikalaujama, kad būtų vaizdas.
- „ViewPearing“: suaktyvinamas prieš pat ekrane pasirodžius rodiniui. Tai naudinga ruošiant duomenis ar atnaujinant įrišimus, kol vaizdas tampa matomas.
- „ViewPeared“: paskambinta po rodinio pasirodymo. Tai yra gera vieta atlikti veiksmus, kurie turėtų įvykti, kai vaizdas bus visiškai matomas.
- „ViewDisAppearing“: įvyksta, kai vaizdas pradeda dingti iš ekrano. Jis gali būti naudojamas valyti išteklius ar pristabdyti vykstančias operacijas.
- „ViewDisAppeared“: suaktyvinamas po to, kai dingo vaizdas. Šis metodas yra naudingas norint išleisti išteklius ar sustabdyti fono užduotis.
- „ViewDestroy“: vadinamas, kai vaizdas bus sunaikintas. Tai būtina valant bet kokius likusius išteklius ar prenumeratas, kad būtų išvengta atminties nutekėjimo [1] [3].
Tombstoning ir valstybės valdymas
„MVVMCross“ pateikia „ViewModel“ būsenos taupymo ir atkūrimo mechanizmus - procesą, vadinamą „antkapių keitimu“. Tai labai svarbu tvarkant žemos atminties situacijas arba kai programa sustabdoma ir atnaujinama:
- Perkrauti: Šis metodas vadinamas, kai „ViewModel“ būseną reikia rehidratuoti, paprastai po to, kai programa buvo sujungta. Tai leidžia „ViewModel“ atkurti ankstesnę būseną [2].
- Pradžia: Kai tik inicijavimas ir rehidracija bus baigti, vadinamas „pradžios“ metodas. Tai gera vieta atlikti bet kurią galutinę sąranką ar pradėti vykdyti operacijas [2].
Navigacijos ir gyvavimo ciklo įvykiai
„MVVMCross“ taip pat integruojasi į savo navigacijos paslaugą, leidžiančią „ViewModels“ reaguoti į navigacijos įvykius:
- „ImvxNavigationservice“: Ši paslauga teikia tokius įvykius kaip „beforenavigate“, „popietę“, „beforeklose“ ir „potlose“, kurie gali būti naudojami navigacijos pakeitimams perimti ir atitinkamai atlikti veiksmus [10].
iššūkiai ir svarstymai
Nors „MVVMCross“ teikia tvirtą gyvenimo ciklo valdymo sistemą, yra keletas iššūkių ir svarstymų:
- Patikimumas: „LifeCycle“ įvykiai paprastai yra patikimi, tačiau ne visada gali būti suaktyvinami taip, kaip tikėtasi dėl konkrečių platformos keiksmažodžių ar pasirinktinės programos logikos [3].
- Vienas tiesos šaltinis: Nėra vieno, vieningo įvykio visiems gyvenimo ciklo pakeitimams, pavyzdžiui, uždaryti „ViewModel“. Kūrėjai turi tvarkyti skirtingus įvykius, tokius kaip „OnAfterclose“ ir „ViewDestroy“ atskirai [4].
Apibendrinant galima pasakyti, kad „MVVMCross“ gyvavimo ciklo įvykiai vaidina svarbų vaidmenį valdant „ViewModel“ elgesį, suteikdami kabliukus inicijavimui, būsenos valdymui ir sąveikai su „View“ gyvenimo cikle. Nors šie renginiai siūlo galingus programų būsenos valdymo įrankius, jiems reikia kruopštaus tvarkymo, kad būtų užtikrintas patikimumas ir nuoseklumas įvairiose platformose.
Citatos:[1] https://www.mvvmcross.com/documentation/fundamentals/viewmodel-lifecycle
[2] https://stackoverflow.com/questions/29372480/mvvmcross-viewmodel-life-cycle
[3] https://www.mvvmcross.com/mvvmcross-5-release/
[4] https://github.com/mvvmcross/mvvmcross/issues/2738
[5] https://yanxiaodi.gitbook.io/xamarin-mvvmcross-handbook/using-mvvmcross-to-create-your-first-xamarin-app/creating-the-core-project/adding-a-viewmodel
]
[7] https://www.mvvmcross.com/documentation/fundamentals/data-binding
[8] https://github.com/mvvmcross/mvvmcross/issues/1806
[9] https://www.reddit.com/r/csharp/comments/12AKrcw/MVVM_QUESTION_How_DO_You_Manage_The_interAction/
[10] https://www.mvvmcross.com/documentation/fundamentals/navigation
[11] https://www.mvvmcross.com/documentation/getting-started/mvvmcross-overview