« [電子書籍] Windows 8 用の青空文庫ビューア | トップページ | [WinRT/Metro] 勝手に「ファミリー」が「ファ㍉ー」に変えられちゃうよぉ! (@@; »

2013年1月17日 (木)

[WinRT/Metro] Windows ストア アプリの「セッション」と、データと、保存タイミング

Windows ストア アプリには「ユーザー セッション」という概念があります。
Windows にログオンしてから初めてアプリを起動すると、 そのアプリのセッションが始まります。
セッションが終わるのは、次のような場合です。 (MSDN: 「アプリのライフサイクルと状態の管理」と「ApplicationExecutionState Enumeration」等から作成)

  • コンピューターからログオフしたとき
  • コンピューターを再起動したとき
  • 閉じるジェスチャを使うか、 Alt キーを押しながら F4 キーを押してアプリを終了したとき
  • タスク マネージャーから終了させたとき
  • アプリがクラッシュしたとき

他のアプリに切り替えたり、 Windows 自体をサスペンドしたりしても、 セッションは継続しています (プログラマ視点では、「継続させねばなりません」)。

ところで、 Windows ストア アプリが扱うデータは、 大雑把に言うと 3種類に分けられます。

  • ユーザー データ
    ユーザーが作成した (と認識している) データ。 一般には、 ファイル セーブ ピッカーで保存する。 アプリをアンインストールした後でも残っているべきデータ。
  • アプリ データ
    アプリの設定や、 ユーザーが作業中のデータのバックアップなど、 セッション終了後も維持すべきデータ。
  • セッション データ
    画面遷移やユーザーが入力中のデータなど、 セッションを維持するために必要なデータ。 セッション終了時には不要になる。

大事な事なので 2回言いますが、 セッション データはセッションをまたいで利用しません。 つまり、 ユーザーが閉じるジェスチャ (画面上端を掴んで下端に向かって捨てる) によってアプリを閉じたときは、 セッション データを破棄するのです。

さて、 それではこれら 3種類のデータは、 いつ保存するのが正解でしょう?
答は、 可及的速やかに、 です。
保存する必要が生じたら、 ただちに保存するのが原則です。 なにも Windows ストア アプリに限ったことではありません。 いつクラッシュするか (自アプリとは限りません。 Windows 自体が落ちることもあります) 分かりませんから、 保存すべきデータが発生したらただちに保存しておくべきなんです。

例外は、ユーザーが保存タイミングを決める場合くらいでしょうか。 (ただし、自動でバックアップしてあげるべき)

で、 セッション データは OnSuspending まで待ってから保存してるじゃないか、 という話が出てくるんですけども。
OnSuspending を通ることなくアプリが落ちる場合というのは、 アプリか Windows がクラッシュした時くらいでしょうか、 いずれにせよセッション終了ということなので、 セッション データを保存しなくてよいパターンなんですね。 だから、 OnSuspending だけで保存すれば十分だ、 と。

OnSuspending だけでアプリ データやユーザー データの保存をやってるとハマります、 気を付けて!

|

« [電子書籍] Windows 8 用の青空文庫ビューア | トップページ | [WinRT/Metro] 勝手に「ファミリー」が「ファ㍉ー」に変えられちゃうよぉ! (@@; »

プログラミング」カテゴリの記事

* プログラミング ( Metro スタイル )」カテゴリの記事

コメント

この記事へのコメントは終了しました。

トラックバック


この記事へのトラックバック一覧です: [WinRT/Metro] Windows ストア アプリの「セッション」と、データと、保存タイミング:

« [電子書籍] Windows 8 用の青空文庫ビューア | トップページ | [WinRT/Metro] 勝手に「ファミリー」が「ファ㍉ー」に変えられちゃうよぉ! (@@; »