皆様、こんばんは!さっそく第2弾デモ解説です。
今回は、セッションの後半の方に解説した、中断・停止・再開・アクティブ化にまつわるプロセスのライフサイクル管理についての、Prism によるハンドリングの方法の解説です。
スライドシェアのURLです。こちらにシェアしましたので、ぜひご覧ください!
<Windows 8.1 におけるストア ビジネスアプリの設計と開発>
中断・停止でもデータを保持する
通常、Windows ストアアプリを開発する際に結構煩雑(楽しいw?)なのは、アプリが中断・停止、等した時にどう処理するか、ということです。前回のブログエントリで書いた#1のシンプルなアプリのサンプルは、ラベルと TextBox 1つですが、これも当然、中断・停止の場合にはデータを保持できないわけです。 例えば、このアプリをデバッグ実行して、 TextBox(Text1)に何かデータを入力します。
そして、Visual Studio に戻り、デバッグの場所メニューバーから、“中断とシャットダウン” ボタンを押して、システムシャットダウンをシミュレートします。その後、再度、デバッグ実行をします。そうすると、当然、データは失われているわけです。
ここで、元々の Visual Studio の無印新規アプリのテンプレートを見てみると、状態の保持に関して、いくつかの駆動部品が存在していることに気づきます。
SuspensionManagerというクラスがあり、これが NavigationHelperによって Pageの中へとリンクされています。そして、これは Frameへとリンクされ、中断等が発生した場合、Pageのコードが、いくつかの OnNavigatedFromイベントを操作し、状態をディクショナリ―群内に保持します。これらは NavigationHelperクラスにより提供されますが、全体としては SuspensionManagerがこれらのオーナーです。この SuspensionManagerにより、App クラスは最終的にこの状態をディスクに保存します。どこで行うかといえば、Suspendingイベントハンドラ内です。これは、SuspensionManagerに保存を依頼することによって発生します。
そこで、アプリがバックアップを行うときに、SuspensionManaerを使って、当該 Frameを登録しなければならないわけです。そして、アプリは、PreviousExecutionStateが Terminatedになっているかを確認し、もしそうなら、当該アプリは、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:publicstring Text1
10: {
11: get
12: {
13:return (this._Text1);
14: }
15: set
16: {
17:base.SetProperty(refthis._Text1, value);
18: }
19: }
20:string _Text1;
21: }
22: }
これを追加した後、デバッグ実行して、テキストボックスに文字列を入れ、デバッグの場所→中断とシャットダウンを選んで、その後、再度実行してみてください。セッションでもご紹介した通り、文字列がリロードされるはずです。
このように、Prism を使ってアプリを開発することは、非常に論理的でシンプルにできることがわかります。これ以外にも、色々なことが可能なのですが、これを見て戴くだけでも、通常のコンシューマー向けアプリにも応用可能なことがわかって戴けると思います。
まとめ
Prism for Windows Runtime のようなフレームワークをストアアプリ開発に使うことは、難しくありません。コマーシャル(ビジネス)アプリのみならず、コンシューマーアプリにも、極めて有効です。
ぜひ Prism for Windows Runtime を使ってアプリ開発を行いましょう。次回は、”デモ解説の #3 - ページ間のナビゲーション” として、セッションでもご紹介した、Flickr を検索するアプリ(検索・検索結果・結果詳細)を使って、ページ間のナビゲーションにつき、解説します。
それではまた!
鈴木章太郎