[WinRT/Metro] Windows ストア アプリの「セッション」と、データと、保存タイミング
Windows ストア アプリには「ユーザー セッション」という概念があります。
Windows にログオンしてから初めてアプリを起動すると、 そのアプリのセッションが始まります。
セッションが終わるのは、次のような場合です。 (MSDN: 「アプリのライフサイクルと状態の管理」と「ApplicationExecutionState Enumeration」等から作成)
- コンピューターからログオフしたとき
- コンピューターを再起動したとき
- 閉じるジェスチャを使うか、 Alt キーを押しながら F4 キーを押してアプリを終了したとき
- タスク マネージャーから終了させたとき
- アプリがクラッシュしたとき
他のアプリに切り替えたり、 Windows 自体をサスペンドしたりしても、 セッションは継続しています (プログラマ視点では、「継続させねばなりません」)。
ところで、 Windows ストア アプリが扱うデータは、 大雑把に言うと 3種類に分けられます。
- ユーザー データ
ユーザーが作成した (と認識している) データ。 一般には、 ファイル セーブ ピッカーで保存する。 アプリをアンインストールした後でも残っているべきデータ。 - アプリ データ
アプリの設定や、 ユーザーが作業中のデータのバックアップなど、 セッション終了後も維持すべきデータ。 - セッション データ
画面遷移やユーザーが入力中のデータなど、 セッションを維持するために必要なデータ。 セッション終了時には不要になる。
大事な事なので 2回言いますが、 セッション データはセッションをまたいで利用しません。 つまり、 ユーザーが閉じるジェスチャ (画面上端を掴んで下端に向かって捨てる) によってアプリを閉じたときは、 セッション データを破棄するのです。
さて、 それではこれら 3種類のデータは、 いつ保存するのが正解でしょう?
答は、 可及的速やかに、 です。
保存する必要が生じたら、 ただちに保存するのが原則です。 なにも Windows ストア アプリに限ったことではありません。 いつクラッシュするか (自アプリとは限りません。 Windows 自体が落ちることもあります) 分かりませんから、 保存すべきデータが発生したらただちに保存しておくべきなんです。
例外は、ユーザーが保存タイミングを決める場合くらいでしょうか。 (ただし、自動でバックアップしてあげるべき)
で、 セッション データは OnSuspending まで待ってから保存してるじゃないか、 という話が出てくるんですけども。
OnSuspending を通ることなくアプリが落ちる場合というのは、 アプリか Windows がクラッシュした時くらいでしょうか、 いずれにせよセッション終了ということなので、 セッション データを保存しなくてよいパターンなんですね。 だから、 OnSuspending だけで保存すれば十分だ、 と。
OnSuspending だけでアプリ データやユーザー データの保存をやってるとハマります、 気を付けて!
| 固定リンク
「プログラミング」カテゴリの記事
- 【.NET / Win8.1 ストアアプリ】 HttpClient で TLS 1.1 / 1.2 に対応するには(2018.06.17)
- 【VS2017 15.7pv2】 XAML のランタイム ツールに 「ヒートマップ」 が増えた(2018.03.28)
- 【.NET Core】 プロジェクトを作ると 「project.assets.json が見つかりません」 エラー(2018.02.10)
- 【#UWP】 ビットマップの表示色を変える (Win2D.uwp 経由で Direct2D を使う)(2017.08.23)
- 【#UWP】 CompactOverlay モード: Picture in Picture というか、「最前面に表示」するウィンドウを作る(2017.08.16)
「* プログラミング ( Metro スタイル )」カテゴリの記事
- 【.NET / Win8.1 ストアアプリ】 HttpClient で TLS 1.1 / 1.2 に対応するには(2018.06.17)
- 【VS2017 15.7pv2】 XAML のランタイム ツールに 「ヒートマップ」 が増えた(2018.03.28)
- 【#UWP】 ビットマップの表示色を変える (Win2D.uwp 経由で Direct2D を使う)(2017.08.23)
- 【#UWP】 CompactOverlay モード: Picture in Picture というか、「最前面に表示」するウィンドウを作る(2017.08.16)
- 【#UWP】 15063用の Acrylic Effect を、ちゃんと実装してみる(2017.08.05)
この記事へのコメントは終了しました。
コメント