MVVMCross의 묘비는 메모리 조건이 낮기 때문에 응용 프로그램이 중단되거나 종료 될 때 뷰 모델의 저장 및 복원 프로세스, Windows Phone 및 Android와 같은 모바일 플랫폼의 일반적인 시나리오를 의미합니다. MVVMCross는이 프로세스를 효과적으로 처리하는 메커니즘을 제공합니다.
건축 및 수명주기
MVMCROSS 뷰 모델은 IOC 컨테이너를 사용하여 인스턴스화되며, 이는 뷰 모델에 종속성을 주입합니다. MVVMCross의 뷰 모델의 수명주기에는 몇 가지 주요 방법이 포함됩니다.
- 구성 : ViewModel은 IOC 컨테이너를 통해 주입 된 종속성으로 생성됩니다.
-ING () : 내비게이션 매개 변수로 뷰 모델을 초기화합니다.
-ReloadState () : 묘비 후 뷰 모델의 상태를 복원합니다.
- 시작 () : 초기화와 재수 화가 완료 될 때 호출 [3].
상태를 저장합니다
응용 프로그램이 묘비되면 mvvmcross는 뷰 모델에서 'savestatetobundle'메소드를 호출합니다. 이 방법을 사용하면 'IMVXBUNDLE'에 데이터를 저장하여 뷰 모델의 상태를 저장할 수 있습니다. 복잡한 데이터를 저장하기 위해 JSON 직렬화를 사용하는 것이 좋습니다 [1].
상태 복원
응용 프로그램이 재 활성화 된 후 MVVMCross는 ViewModel의 상태를 복원하려고 시도합니다. 그러나 상태를 복원하는 정확한 방법은 MVVMCross의 플랫폼 및 버전에 따라 다를 수 있습니다. 일반적으로 'ReloadState'방법은 저장된 상태로 뷰 모델을 재수 화하는 데 사용됩니다 [3].
플랫폼 별 고려 사항
MVVMCross가 지원하는 각 플랫폼은 묘비를 다르게 처리합니다.
- Windows Phone : Tombstoning은`onnavigatedto` 및`onnavigatedfrom '과 같은 페이지 이벤트를 통해 처리됩니다. MVVMCross는 이러한 이벤트 동안 상태를 저장하고 복원하는 메커니즘을 제공하지만 적절한 상태 복원을 보장하기 위해 추가 설정이 필요할 수 있습니다 [4] [5].
- Android : MVVMCross는 응용 프로그램이 일시 중지되거나 재개 될 때 뷰 모델 상태를 저장하고 복원하여 묘비를 처리합니다. 그러나 백 스택이 지워지거나 내비게이션 매개 변수가 제대로 저장되지 않은 경우 문제가 발생할 수 있습니다 [6].
도전 및 솔루션
MVVMCross에서 묘비를 처리하는 것은 특히 매개 변수로 탐색 할 때 어려울 수 있습니다. 응용 프로그램 상태의 올바른 복원을 보장하기 위해 뷰 모델 상태와 함께 내비게이션 매개 변수를 저장하는 것이 중요합니다 [6] [9]. 또한, 도우미 라이브러리 또는 사용자 정의 솔루션을 사용하면 다른 플랫폼에서 상태를 저장하고 복원하는 프로세스를 단순화 할 수 있습니다 [5] [8].
요약하면 MVVMCross는 뷰 모델 상태를 저장하고 복원하여 묘비를 처리하기위한 강력한 프레임 워크를 제공합니다. 그러나 원활한 애플리케이션 복구를 보장하기 위해 플랫폼 별 뉘앙스를 신중하게 구현하고 고려해야합니다.
인용 :[1] https://www.mvvmcross.com/documentation/fundamentals/viewmodel-lifecycle
[2] https://www.mvvmcross.com/mvvmcross-51-release/
[3] https://stackoverflow.com/questions/29372480/mvvmcross-viewmodel-life-cycle
[4] https://stackoverflow.com/questions/16023307/mvvmcross-and-tombstoning
[5] https://www.kenneth-truyers.net/2013/03/13/tombstoning-made-insy-in-wins-phone-pone-mvvm/
[6] https://github.com/mvvmcross/mvvmcross/issues/834
[7] https://github.com/mvvmcross/mvvmcross/blob/develop/changelog.md
[8] https://jesseliberty.com/2011/04/08/tombstoning-and-mvvm/
[9] https://github.com/mvvmcross/mvvmcross/issues/2458
[10] https://www.mvvmcross.com/mvvmcross-56-release/