Udalosti životného cyklu v MVVMCross významne ovplyvňujú správanie sa viewmodelov poskytovaním štruktúrovaného spôsobu riadenia svojho stavu a interakcií s názorom. Tu je podrobný prehľad o tom, ako tieto udalosti životného cyklu ovplyvňujú správanie ViewModel:
Konštrukcia a inicializácia
- Konštrukcia: MVVMCross instantuje viewmodel pomocou kontajnera IOC, pričom vkladá závislosti uvedené v konštruktore ViewModel. To zaisťuje, že všetky potrebné služby sú k dispozícii po vytvorení ViewModel [1] [2].
- Inicializácia: Metóda `Init` sa používa na odovzdanie navigačných parametrov do programu ViewModel. Je to preferovaný spôsob inicializácie údajov v rámci ViewModel, čo mu umožňuje nastaviť svoj vnútorný stav na základe prijatých parametrov [2].
Metódy životného cyklu
Počnúc od MVVMCross 5.0 sú ViewModels pevne spojené so životným cyklom ich zodpovedajúcich pohľadov. To znamená, že ViewModels majú prístup k niekoľkým metódam životného cyklu, ktoré odzrkadľujú udalosti špecifické pre platformu v zobrazení:
- ViewCreated: Volá sa pri vytvorení pohľadu. Táto metóda sa dá použiť na vykonávanie úloh nastavenia, ktoré vyžadujú prítomnosť pohľadu.
- ViewAppareing: Spustené tesne pred zobrazením zobrazenia na obrazovke. Je užitočné na prípravu údajov alebo aktualizáciu väzieb pred viditeľným pohľadom.
- Zobraziť: Volá sa po objavení pohľadu. Je to dobré miesto na vykonávanie akcií, ktoré by sa mali stať, keď bude výhľad úplne viditeľný.
- ViewDISAppareing: Vyskytuje sa, keď pohľad začne zmiznúť z obrazovky. Môže sa použiť na vyčistenie zdrojov alebo na pozastavenie prebiehajúcich operácií.
- ViewDisApheared: Spustené po zmiznutí pohľadu. Táto metóda je užitočná na uvoľnenie zdrojov alebo na zastavenie úloh na pozadí.
- ViewDestroy: Volal sa, keď sa má výhľad zničiť. Je nevyhnutné vyčistiť všetky zostávajúce zdroje alebo predplatné, aby sa zabránilo úniku pamäte [1] [3].
Tombstoning a štátne riadenie
MVVMCross poskytuje mechanizmy na záchranu a obnovenie stavu ViewModel, proces známy ako „Tombstoning“. To je rozhodujúce pre riešenie situácií s nízkym pamätným alebo pri pozastavení aplikácie a potom obnovení:
- ReloadState: Táto metóda sa nazýva, keď je potrebné rehydratovať štát ViewModel, zvyčajne po tom, čo bola aplikácia Tombstoned. Umožňuje spoločnosti ViewModel obnoviť svoj predchádzajúci stav [2].
- Štart: Po dokončení inicializácie a rehydratácie sa volá metóda `Start`. Je to dobré miesto na vykonanie akéhokoľvek konečného nastavenia alebo na začatie prebiehajúcich operácií [2].
Navigácia a udalosti životného cyklu
MVVMCross sa tiež integruje do svojej navigačnej služby, čo umožňuje spoločnosti ViewModels reagovať na navigačné udalosti:
- IMVXNavigationService: Táto služba poskytuje udalosti ako „beforeNavigate`,` Popoludňajší`, `befoReclose` a` Doplnkose`, ktoré sa môžu použiť na zachytenie zmien navigácie a na vykonanie akcií [10].
Výzvy a úvahy
Zatiaľ čo MVVMCross poskytuje robustný systém riadenia životného cyklu, existujú určité výzvy a úvahy:
- Spoľahlivosť: Udalosti životného cyklu sú vo všeobecnosti spoľahlivé, ale nemusia byť vždy spustené podľa očakávania z dôvodu kúskov špecifických pre platformu alebo vlastnej logiky aplikácií [3].
- Jeden zdroj pravdy: Neexistuje žiadna jediná zjednotená udalosť pre všetky zmeny životného cyklu, napríklad zatvorenie ViewModel. Vývojári musia zaobchádzať s rôznymi udalosťami ako „OnAfterClose` a„ ViewDestroy “osobitne [4].
Stručne povedané, udalosti životného cyklu v MVVMCross hrajú rozhodujúcu úlohu pri riadení správania sa viewModel poskytovaním háčikov na inicializáciu, správu štátu a interakciu so životným cyklom pohľadu. Aj keď tieto udalosti ponúkajú výkonné nástroje na správu stavu aplikácií, vyžadujú starostlivé zaobchádzanie, aby sa zabezpečila spoľahlivosť a konzistentnosť na rôznych platformách.
Citácie:[1] https://www.mvvmcross.com/documentation/funmamentals/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
Https://yanxiaodi.gitbook
[6] https://www.reddit.com/r/android_devs/comments/iyz86l/is_it_ok_for_the_viewmodel_to_be_lifecycle_aware/
[7] https://www.mvvmcross.com/documentation/funmamentals/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/funmamentals/navigation
[11] https://www.mvvmcross.com/documentation/getting-started/mvvmcross-woreview