2011年7月30日土曜日

アプリ起動と終了のイベントに関して整理してみる。

以前、「Windows Phoneのアプリケーションを強制的に終了させる。」という記事の中でアプリケーション起動のイベントに書いてみました。
もう少しこの辺の説明が必要かなと思いましたので、書いておきたいと思います。

アプリケーションの起動と終了には、以下の4種類のイベントが用意されています。

  1. Lauching
  2. Closing
  3. Activated
  4. Deactivated

これらのイベントは、それぞれ以下のようなタイミングでコールされます。

  1. Lauching
    アプリケーション一覧やショートカットタイルから起動したときに呼ばれるイベント。
    このイベントは1回しか呼ばれない。
  2. Closing
    【戻る】ボタンを押して、アプリケーションを終了するときに呼ばれるイベント。
    このイベントは1回しか呼ばれない。
  3. Activated
    他のアプリケーションからアプリケーションが復帰したときに呼ばれるイベント。
    このイベントは、復帰するたびに呼ばれる。
  4. Deactivated
    【戻る】ボタンの長押しや【Windows】ボタンを押したりして、一時的にアプリケーションを退避させたときに呼ばれるイベント。
    このイベントは、退避するたびに呼ばれる。

図というか、フローで表すとこんな感じです。

image

Windows PhoneアプリケーションのテンプレートにあるApp.xaml.csに上記イベントのメソッドが、すでに定義されていますので、実際に動かしてみて確認されてもよいかと思います。
この辺の動作は、アプリケーション申請でも厳しく見られるようなので注意していきましょう。

2011年7月18日月曜日

WPアプリケーションの強制終了に関する注意事項

昨日、アプリケーションを強制終了させる方法について記載しました。
この方法については、日本MSエバンジェリストの高橋忍さんが注意事項をブログで紹介されています。

開始画面以外では Back ボタンでアプリケーションを終了させるべきではない
http://blogs.msdn.com/b/shintak/archive/2011/07/17/10187268.aspx

本来、「はじめの画面でバックボタンを押した時にアプリケーションを終了させる」というのがWindows Phoneの操作ガイドラインにあります。強制終了という手順は、本来の操作から外れた行為になるのでよろしくないですよ、ということですね。

開発者として、ガイドラインを守るというのも大切なことになります。
不具合の調査などに個人の使用のみに留めるなど、配慮が必要でしょう。

アプリがノンアクティブになった場合や、逆にアクティブになったときに初期化する必要がある場合は、その都度初期化するようにイベントにコーディングする必要があると思います。

2011年7月17日日曜日

Windows Phoneのアプリケーションを強制的に終了させる。

アプリケーションを終了させる方法として、Windows Phoneアプリケーションでは、基本的に「終了させたいアプリケーションの最初のコンテンツでバックボタンを押すこと」により終了します。

ですが、アプリケーションの種類によっては「メニューから終了させたい」とか「バックボタンを押したらすぐに終了させたい」なんて仕様もあるかと思います。
ですが、Windows PhoneのSilverlightアプリケーションは基本的に何もしなければ履歴としてメモリ上に残ります。その証拠にバックボタンを長押しすると、アプリケーションの履歴が表示されて自分のアプリケーションが表示されていることが分かるかと思います。
この場合はどうすれば良いのか、この場合はアプリケーションを終了させるメソッドを用意する必要があります。

バックボタンを押した時に終了させる方法は、MSエバンジェリストの高橋忍さんがブログにてコードを紹介されています。こちらのコードをご覧になるのが一番参考になるかと思います。
http://blogs.msdn.com/b/shintak/archive/2011/07/16/10187146.aspx

要点は以下の点を把握しておく必要があります。

  • App.xaml.csに終了用のメソッドを用意します。
    このメソッドが、各コンテンツから終了させるためのものとなります。
  • 終了用のメソッドでは専用のExceptionを発行するようにします。
    この場合はQuitExceptionのように分かりやすい例外名を定義しておくと良いです。
  • ハンドルされていないExceptionはApplication_UnhandledExceptionメソッドが呼ばれます。
    このメソッドでExceptionをチェックし、該当の例外ならreturnさせます。
  • バックボタンが押されたかをアプリケーション上でチェックするには、overrideして、以下のメソッドを定義する必要があります。メソッドの定義はintellisenseが自動的に作成してくれます。
    protected override void OnBackKeyPress(System.ComponentModel.CancelEventArgs e)
    このメソッドを定義して、その中に条件を設定するなりして、終了用メソッドをコールするようにします。

また、併せてテンプレートで生成されるapp.xaml.csの以下の定義がどのようなタイミングでコールされるか、把握しておくと良いでしょう。

  • Application_Launching
    アプリケーションが起動するときにコールされます。
  • Application_Activated
    アプリケーションがアクティブになったときにコールされます。
  • Application_Deactivated
    アプリケーションから別のアプリケーションに切り替える時(バックボタンの長押し時)にコールされます。
  • Application_Closing
    アプリケーションが終了するときにコールされます。
  • Application_UnhandledException
    アプリケーション内でハンドルされていない例外がスローされたときにコールされます。

このあたりの処理は、アプリケーションを詰めていくと処理を記述する必要が出てくるようになると思います。

2011年7月16日土曜日

Windows Phone 開発向けのブログを開設しました。

すでに記事は「とある個人事業主のシステム開発メモ」というところで公開しているのですが、Windows Phone専門でこちらでも公開するようにしたいと思います。

主にライブラリの使い方とか、Blendとの連携とかを公開できれば良いかなぁと思っています。