Wersje MVVMCROSS 3.x i 4.x mają kilka różnic dotyczących cyklu życia ViewModel, przede wszystkim skoncentrowanych wokół sposobu konstruowania, inicjacji i zarządzania widokami.
Mvvmcross 3.x
W MVVMCROSS 3.x cykl życia ViewModel jest zgodny z sekwencją znaną jako CIRS: Construction, init (), ReloadState () i start (). Ta sekwencja służy do inicjalizacji i zarządzania ViewModels. Oto awaria:
- Konstrukcja: ViewModel jest utworzony za pomocą pojemnika MKOl, umożliwiając wstrzyknięcie zależności. W tym miejscu usługi i inne zależności są wstrzykiwane do ViewModel.
- init (): Ta metoda służy do inicjalizacji parametrów nawigacyjnych. Jest to nazywane po budowie i jest to, gdzie zwykle skonfigurowałbyś wszelkie początkowe dane lub parametry przekazane do ViewModel.
- ReloadState (): Ta metoda jest odpowiedzialna za uwodnianie stanu ViewModel po nagrobku, który występuje, gdy aplikacja jest zawieszona, a następnie wznowiona z powodu niskich warunków pamięci.
- Start (): Ta metoda jest wywoływana po zakończeniu inicjalizacji i nawodnienia. Zwykle służy do rozpoczęcia działań lub zadań.
Mvvmcross 4.x
MVVMCROSS 4.x nadal używa sekwencji CIRS, ale wprowadza pewne zmiany i ulepszenia:
- Konstrukcja pozostaje taka sama, przy użyciu MKOl do wstrzyknięcia zależności.
- init () nadal inicjuje parametry nawigacyjne, ale jest teraz bardziej elastyczne, co pozwala na wpisane parametry nawigacji.
- ReloadState () nadal zajmuje się nawodnieniem państwowym po nagrobku.
- start () jest podobny, ale może być stosowany rzadziej ze względu na wprowadzenie bardziej asynchronicznych metod inicjalizacji.
Znacząca zmiana MVVMCROSS 4.x to ciągłe obsługę parametrów nawigacyjnych, co pozwala na bardziej ustrukturyzowane dane przechodzące między ViewModels. Ponadto MVVMCROSS 4.x stanowi podstawę do przyszłych ulepszeń nawigacji i zarządzania cyklem życia, które są dodatkowo wzmocnione w MVVMCross 5.x.
Kluczowe różnice
- Parametry nawigacyjne: MVVMCROSS 3.x przekazuje parametry nawigacji bezpośrednio do metody `init ()`, podczas gdy MVVMCROSS 4.X obsługuje wpisane parametry nawigacji, co ułatwia przekazywanie złożonych danych między ViewModels.
- Elastyczność cyklu życia: MVVMCROSS 4.x zapewnia większą elastyczność w obsłudze życia ViewModel, szczególnie wraz z wprowadzeniem metod inicjalizacji asynchronicznej.
- Obsługa Tombstoning: Obie wersje obsługują Tombstoning, ale MVVMCROSS 4.x nadal udoskonala ten proces, zapewniając, że ViewModels mogą skutecznie oszczędzać i przywrócić swój stan.
Ogólnie rzecz biorąc, MVVMCROSS 4.x opiera się na fundamencie ustanowionym w 3.x poprzez zwiększenie nawigacji, zarządzania cyklem życia i elastyczności w obsłudze złożonych danych i operacji asynchronicznych.
Cytaty:[1] https://www.mvvmcross.com/documentation/fundamentals/viewmodel-lifecycle
[2] https://stackoverflow.com/questions/49322704/mvvmcross-view-model-lifecycle-store-not-working
[3] https://stackoverflow.com/questions/15961664/viewmodel-lifecycle-when-does-it-get-disposed
[4] https://stackoverflow.com/questions/71959649/does-mvvmcross-have-a-lu-lubuilt-message-for-viewmodel-to-tell-view-wiewappea
[5] https://stackoverflow.com/questions/29372480/mvvmcross-viewmodel-life-cycle
[6] https://www.mvvmcross.com/documentation/advanced/customizing-using-app-andetup
[7] https://www.mvvmcross.com/documentation/tutorials/tipcalc/a-note-about-views-and-viewmodels
[8] https://www.ramotion.com/blog/what-is-mvvm/
[9] https://www.mvvmcross.com/documentation/fundamentals/navigation
[10] https://www.mvvmcross.com/documentation/fundamentals/inversion-of-control-ioc
[11] https://www.mvvmcross.com/documentation/getting-started/mvvmcross-overview
[12] https://github.com/mvvmcross/mvvmcross/issues/2738