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
    アプリケーション内でハンドルされていない例外がスローされたときにコールされます。

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

0 件のコメント:

コメントを投稿