トゥームストーンのアプリケーションの状態をいつ保存するのですか?
-
30-09-2019 - |
質問
シングルページのビューモデルを保存するのがいつ適切であるのか疑問に思っていました。
私は2つの可能性を見ます:
- 各ページの状態(ビューモデル)を保存するたびに、墓のプロセス中にアプリケーションが終了および再アクティブ化された場合に既に保存されているように、それが既に保存されています
- アプリケーションの無効イベントでは、ナビゲーションスタック内にあるすべてのページを通過し、状態(ViewModel)を保存し、アプリケーションアクティブ化されたイベントで再注入します。
それを処理する正しい方法はどれですか?
Thx Simone
解決
残念ながら、状態を救うための「最良の」時間は以下に依存します。各ページで使用されるモデルの複雑さ。各ページがサポートする相互作用。ページ間で共有されるモデルの複雑さ(アプリレベル)。
として 全般的 ルール私は、アプリケーションレベルで単一のモデルを持ち、アクティベーション/非アクティブ化時にそれを維持します。ページのモデルは、アプリレベルモデルの一部への参照であり、ページまでのナビゲーションに関するページの特定の情報のみを維持します。
私が持続するページ特定の情報の例は次のとおりです。およびスクロール位置。
他のヒント
私はそれがあなたのニーズに依存すると思いますが、ドキュメントから迷う必要はほとんどありません。これは、持続的で過渡的な(状態)データを保存するための適切な場所としてアプリケーションの非アクティブ化イベントを示唆しています。実行モデルの概要 (アクティブ化中の制御フロー図を参照)
この記事 また、アプリのライフサイクルとトゥームストーンの例を使用して、バックアウト/クロージング、非アクティブ化、および墓石を区別する例で適切な説明を提供します。
ユーザーがページの変更の間にフォアグラウンドアプリを変更するタイミングを予測することはできません。ただし、閉鎖または非アクティブ化するときに何が起こるかを予測できます。したがって、ビュー間でページ状態を保存することは無関係に思えます。
十分な「評判」がないため、以前の回答に投票することはできませんが、はい、アプリケーションで一時的な状態情報を持続する必要があります。
アプリケーションセッション間で何かを保存する必要がある場合は、Application.Closingイベントを使用できますが、保存する必要があるものに応じて、変更するたびに保存できます。繰り返しますが、保存する必要があるものに応じて、アプリケーションで復元するか、必要なときに読むことができます。
これは私も考えたことです。
私はそれについて私の見解を一般化しました。
できるだけ早く保存してください。
これが意味することは、他の命令に匹敵するものであり、セーブを延期するように動機付け、最も早い機会にセーブを行います。メインストアに直接保存するか、トゥームストーンを処理するために特に一時的な状態に保存する場合があります。ページが開いている間、バックグラウンドを保存する場合があります。ユーザーがページ間でナビゲートするように要求したときに保存する場合があります。
電力の喪失など、予期しないことが発生する可能性がある場合、ユーザーに注意を必要とする例外(非アクティブ化されている場合、これには時間がないことに注意してください)、早期に節約することでユーザーにもう少し依存性が得られます。
貯蓄を延期するように動機付けられるかもしれない命令は、含めることができます
- アーキテクチャに応じて、ページレベルで保存データを実装するのは不便な場合があります。
- 保存するデータの量と、分離されたストレージモデルのアーキテクチャに応じて、ページまたはフィールドレベルで実質的に保存しようとするパフォーマンスを損なう可能性があります。