“Windows 8.1 におけるストア ビジネスアプリの開発”(MVP Community Camp 2014)DEMO解説 #2:中断・停止・再開・アクティブ化

皆様、こんばんは!さっそく第2弾デモ解説です。

今回は、セッションの後半の方に解説した、中断・停止・再開・アクティブ化にまつわるプロセスのライフサイクル管理についての、Prism によるハンドリングの方法の解説です。

スライドシェアのURLです。こちらにシェアしましたので、ぜひご覧ください!

<Windows 8.1 におけるストア ビジネスアプリの設計と開発>

Windows 8.1 におけるストア ビジネスアプリの設計と開発 from Shotaro Suzuki

image

中断・停止でもデータを保持する

通常、Windows ストアアプリを開発する際に結構煩雑(楽しいw?)なのは、アプリが中断・停止、等した時にどう処理するか、ということです。前回のブログエントリで書いた#1のシンプルなアプリのサンプルは、ラベルと TextBox 1つですが、これも当然、中断・停止の場合にはデータを保持できないわけです。 例えば、このアプリをデバッグ実行して、 TextBox(Text1)に何かデータを入力します。

image

そして、Visual Studio に戻り、デバッグの場所メニューバーから、“中断とシャットダウン” ボタンを押して、システムシャットダウンをシミュレートします。その後、再度、デバッグ実行をします。そうすると、当然、データは失われているわけです。

image

ここで、元々の Visual Studio の無印新規アプリのテンプレートを見てみると、状態の保持に関して、いくつかの駆動部品が存在していることに気づきます。

SuspensionManager というクラスがあり、これが NavigationHelper によって Page の中へとリンクされています。そして、これは Frame へとリンクされ、中断等が発生した場合、Page のコードが、いくつかの OnNavigatedFrom イベントを操作し、状態をディクショナリ―群内に保持します。これらは NavigationHelper クラスにより提供されますが、全体としては SuspensionManager がこれらのオーナーです。この SuspensionManager により、App クラスは最終的にこの状態をディスクに保存します。どこで行うかといえば、Suspending イベントハンドラ内です。これは、SuspensionManager に保存を依頼することによって発生します。

そこで、アプリがバックアップを行うときに、SuspensionManaer を使って、当該 Frame を登録しなければならないわけです。そして、アプリは、PreviousExecutionStateTerminated になっているかを確認し、もしそうなら、当該アプリは、SuspensionManager に対して、保存された状態をリロードするようにリクエストします。

これは、セッションでもお話しましたが、アプリの構造によってはハンドリングが複雑になる場合もあり得ます。必ずしもこれらの部品が順番にその時必要なデータにアクセスできるとも限りません。

Prism を使って開発したアプリであれば、破棄された状態データを維持することは、多くの駆動部品によってではなく、ViewModel によって行わせることができます。今あるアプリのコードに、 [RestorableState] という一つの属性を追加するだけで、現在の中断・停止問題を解決することができます。

    1: using Microsoft.Practices.Prism.StoreApps;
    2: using Microsoft.Practices.Prism.StoreApps.Interfaces;
    3:  
    4: namespace App4.ViewModels
    5: {
    6:     class MainPageViewModel : ViewModel
    7:     {
    8:        [RestorableState]
    9:         public string Text1
   10:         {
   11:             get 
   12:             {
   13:                 return (this._Text1);
   14:             }
   15:             set
   16:             {
   17:                 base.SetProperty(ref this._Text1, value);
   18:             }
   19:         }
   20:         string _Text1;
   21:     }
   22: }

これを追加した後、デバッグ実行して、テキストボックスに文字列を入れ、デバッグの場所→中断とシャットダウンを選んで、その後、再度実行してみてください。セッションでもご紹介した通り、文字列がリロードされるはずです。

image

このように、Prism を使ってアプリを開発することは、非常に論理的でシンプルにできることがわかります。これ以外にも、色々なことが可能なのですが、これを見て戴くだけでも、通常のコンシューマー向けアプリにも応用可能なことがわかって戴けると思います。

image

まとめ

Prism for Windows Runtime のようなフレームワークをストアアプリ開発に使うことは、難しくありません。コマーシャル(ビジネス)アプリのみならず、コンシューマーアプリにも、極めて有効です。

ぜひ Prism for Windows Runtime を使ってアプリ開発を行いましょう。次回は 、”デモ解説の #3 - ページ間のナビゲーション” として、セッションでもご紹介した、Flickr を検索するアプリ(検索・検索結果・結果詳細)を使って、ページ間のナビゲーションにつき、解説します。

それではまた!

鈴木章太郎