MVVMCrossのトゥームストンニングとは、Windows PhoneやAndroidなどのモバイルプラットフォームの一般的なシナリオであるメモリ条件が低いためにアプリケーションが一時停止または終了したときに、ビューモデルの状態を保存および復元するプロセスを指します。 MVVMCrossは、このプロセスを効果的に処理するメカニズムを提供します。
###建設とライフサイクル
MVVMCross ViewModelsは、IOCコンテナを使用してインスタンス化され、依存関係をViewModelに注入します。 MVVMCrossのViewModelのライフサイクルには、いくつかの重要な方法が含まれています。
- 構築:ViewModelは、IOCコンテナを介して依存関係を注入して作成されます。
-init():ナビゲーションパラメーターを使用してViewModelを初期化します。
-RELOADSTATE():TOMBSTONING後にViewModelの状態を復元します。
-Start():初期化と再水分化が完了したときに呼び出されます[3]。
###州の保存
アプリケーションが墓石になった場合、MVVMCrossはViewModelの「SavestateToBundle」メソッドを呼び出します。この方法を使用すると、「imvxbundle」にデータを保存して、viewmodelの状態を保存できます。複雑なデータを保存するためにJSONシリアル化を使用することをお勧めします[1]。
###復元状態
アプリケーションが再活性化された後、MVVMCrossはViewModelの状態を復元しようとします。ただし、状態を復元する正確な方法は、MVVMCrossのプラットフォームとバージョンによって異なります。一般に、「reloadstate」メソッドを使用して、保存された状態でビューモデルを再水素化します[3]。
###プラットフォーム固有の考慮事項
MVVMCrossによってサポートされている各プラットフォームは、TOMBSTONINGを異なる方法で処理します。
- Windows Phone:Tombstoningは、「onnavigated」や「onnavigatedfrom」などのページイベントで処理されます。 MVVMCrossは、これらのイベント中に状態を保存および回復するメカニズムを提供しますが、適切な状態回復を確保するために追加のセットアップが必要になる場合があります[4] [5]。
-Android:MVVMCrossは、アプリケーションが一時停止または再開されたときにViewModel状態を保存および復元することにより、トゥームストーンを処理します。ただし、バックスタックがクリアされている場合、またはナビゲーションパラメーターが適切に保存されていない場合に問題が発生する可能性があります[6]。
###課題とソリューション
MVVMCrossでのトゥームストーンの取り扱いは、特にパラメーターを使用してナビゲートする場合に挑戦する可能性があります。アプリケーションの状態の正しい回復を確保するために、ビューモデル状態とともにナビゲーションパラメーターを保存することが重要です[6] [9]。さらに、ヘルパーライブラリまたはカスタムソリューションを使用すると、さまざまなプラットフォームで状態を保存および復元するプロセスを簡素化できます[5] [8]。
要約すると、MVVMCrossは、ViewModel状態を保存および復元することにより、トゥームストーンを処理するための堅牢なフレームワークを提供します。ただし、シームレスなアプリケーションの回復を確保するために、プラットフォーム固有のニュアンスの慎重な実装と検討が必要です。
引用:[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-easy-in-windows-phone-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/