Версии MVVMcross 3.x и 4.x имеют несколько различий в отношении жизненного цикла ViewModel, в основном сосредоточенного на том, как просмотры строится, инициализируются и управляются.
mvvmcross 3.x
В MVVMcross 3.x жизненный цикл ViewModel следует последовательности, известной как CIRS: Construction, init (), ReloadState () и start (). Эта последовательность используется для инициализации и управления ViewModels. Вот срыв:
- Строительство: ViewModel создается с использованием контейнера IOC, что позволяет инъекция зависимости. Именно здесь услуги и другие зависимости вводят в ViewModel.
- init (): этот метод используется для инициализации параметров навигации. Это называется после конструкции и является тем, где вы обычно настраиваете любые начальные данные или параметры, передаваемые в ViewModel.
- ReloadState (): Этот метод отвечает за регидратирование состояния ViewModel после надгробия, которое происходит, когда приложение приостановлено, а затем возобновилось из -за низких условий памяти.
- start (): этот метод вызывается, когда инициализация и регидрация завершены. Обычно он используется для запуска любых текущих операций или задач.
mvvmcross 4.x
MVVMcross 4.x продолжает использовать последовательность CIRS, но вводит некоторые изменения и улучшения:
- Строительство остается прежним, используя МОК для инъекции зависимости.
- init () по -прежнему инициализирует параметры навигации, но теперь является более гибким, что позволяет напечатать параметры навигации.
- ReloadState () продолжает обрабатывать государственную регидратацию после надгробия.
- start () аналогичен, но может использоваться реже из -за введения более асинхронных методов инициализации.
Значительным изменением в MVVMcross 4.x является постоянная поддержка типизированных параметров навигации, что позволяет проводить более структурированные данные между ViewModels. Кроме того, MVVMcross 4.x закладывает основу для будущих улучшений на навигации и управлении жизненным циклом, которые дополнительно улучшаются в MVVMcross 5.x.
Ключевые различия
- Параметры навигации: MVVMcross 3.x передает параметры навигации непосредственно к методу `init ()`, в то время как MVVMcross 4.x поддерживает типичные параметры навигации, что облегчает передачу сложных данных между ViewModels.
- Гибкость жизненного цикла: MVVMcross 4.x обеспечивает большую гибкость в обработке жизненных циклов ViewModel, особенно с введением асинхронных методов инициализации.
- Поддержка надгробия: обе версии поддерживают надгробие, но MVVMcross 4.x продолжает уточнять этот процесс, гарантируя, что ViewModels может эффективно сохранить и восстановить свое состояние.
В целом, MVVMcross 4.x опирается на фундамент, созданный в 3.x путем улучшения навигации, управления жизненным циклом и гибкости в обработке сложных данных и асинхронных операций.
Цитаты:[1] https://www.mvvmcross.com/documentation/fundamentals/viewmodel-lifecycle
[2] https://stackoverflow.com/questions/49322704/mvvmcross-view-model-lifecycle-restore-not-roking
[3] https://stackoverflow.com/questions/15961664/viewmodel-lifecycle-when-does-it-get-disposed
[4] https://stackoverflow.com/questions/71959649/does-mvvmcross-have-abuilt-in-message-for-viewmodel-to-tell-when-viewappea
[5] https://stackoverflow.com/questions/29372480/mvvmcross-viewmodel-life-cycle
[6] https://www.mvvmcross.com/documentation/advanced/customizing-using-app-and-setup
[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