WDD でお話するまでの経緯とデモ内容のフォロー

WDDのアプリのライフサイクルと実行環境に、多くの方が参加していただきまして有難うございました。少し、時間が延びましたが、本当に有難うございました。今回は、この時にお話しできなかった話題と準備作業の舞台裏を記載します。
資料の作成を始めたのは3月からなのですが、デモの準備をしながら資料の見直しやサンプルの作り直しなどを何度も行っていました。大体の準備ができたのが4/13で、翌週に最終チェックと環境整備を行っていました。私がデモで使用したPCは、自前のHP TouchSmart tx2なのですが、この時に結局3回ほどインストールを行っていました。この理由は、マルチタッチのドライバーです。タッチパネルがN-Trig製なのですが、HPから提供されているDuoSenseはWindows 8にインストールすることができません。ドライバーインストールを様々な方法で試した結果、シングルタッチでは動作していましたが、やはりマルチタッチにしたいということから再インストールを実施したのです。このPC特有かも知れませんが、DuoSenseのインストール方法を以下に記載します。

  1. Windows 7 環境でマルチタッチを有効にする(DuoSenseをインストール)。
  2. Windows 8 CPをアップグレードインストールします。
  3. N-Trigが公開しているベータードライバーをインストールします。
  4. マルチタッチが動作しない場合は、再起動してみる。

上記の方法で私の環境では動作していますが、デバイスマネージャーには「N-Trig device Not Win8 supported upgrade it」と表示されています。この表示は、N-TrigのNtrigDigi.infファイルに記載されていまして、ドライバーインストール時に何かの条件に一致するとこのようになるようです。

WDDでお見せしたデモアプリが、どのような動きをしていたかを以下に記載します。

  • アクティベーションのデモ
    アプリの状態には、実行していない(Not Running)、実行中(Running)、一時停止(Suspending)があります。また、以前の実行状態には、終了(Not Running)と強制終了(Terminat)があります。この状態に応じて、タイルのバッジにグリフ(アイコンのような図形です)を表示するというものでした。強制終了(OSが終了させる)した場合に、入力した内容を保存して、次に起動した場合に読み込むという動作もお見せしました。これは、強制終了する場合に、必ずSuspendingイベントが発生することを確認するためのものでした。
  • ライブタイルのデモ
    タイルを更新するためのタイルAPIを使って、更新することと、ローカルキューを介した更新をお見せしました。また、バッジを数字(1から99)で更新することもお見せしました。ここで説明が不足していたのは、タイルを更新してからアプリが終了した場合のタイルがどうなるかという点です。このケースでは、更新したタイルの中身(タイル自体やバッジ)は残ります。つまり、ライブタイルで更新した内容はアプリのインスタンスとは別にシステム側で管理されているということになります。残ったタイルの更新内容を消去するには、タイルAPIを使って更新内容を空にするなどの操作が必要になります。従って、ライブタイルを使用する場合は、有効期限を忘れずに設定するのが良いと私は考えています。
  • スプラッシュスクリーンのデモ
    スプラッシュ スクリーンは、パッケージマニフェストに指定した画像がシステムによって自動的に表示されます。アプリの初期化に15秒以上かかる場合に、強制終了となります。このような場合に行うのが、自前でスプラッシュスクリーンを表示することです。アプリの初期化の終了とは、CPの場合はActivateイベントを抜けるタイミングとなります。スプラッシュ スクリーンAPIを使用することで、スプラッシュスクリーンに指定した画像の表示位置やサイズなどの情報を取得できます。取得した情報を使って、自前のスプラッシュスクリーンとして表示する画像などの位置を調整します。デモでは、意図的に背景色を変えていました。これは、指定した画像ではなく自前で用意したことを明示するための処置でした。実際のアプリで、このようなことをしてはいけません。
  • バックグラウンド オーディオのデモ
    バックグラウンド タスクの利用例として、バックグラウンド オーディオを動作させるデモを行いました。バックグラウンド オーディオを実現するには、パッケージ マニフェストへのバックグラウンド タスクの定義(タスクタイプにオーディオ、スタートページを設定)とコントロールのAudioCategoryの設定とWindows.Media.MediaControlに対するイベントハンドラーの実装を行う必要があります。

バックグラウンド タスクには、タスクを動作させるためのホストプログラムが必要になります。ホストプログラムには、アプリ自身とbackgroundTaskHost.exeの2種類があります。バックグラウンド オーディオは、アプリ自身をホストとしてSystem Control Device の通知を処理するという種類のバックグラウンド タスクになります。そして、バックグラウンド タスクのSDKサンプルからも理解することができますが、backgroundTaskHost.exeがホストできるタスクは、C#、VBやC++で作成したWindowsランタイム コンポーネントだけになります。つまり、JavaScriptで記述したバックグラウンド タスクをホストするには、アプリ自身がホストするしかないということです。これが、SDKサンプルにJavaScript + C# というサンプルが含まれている理由となります。この辺りを時間切れで、WDDでお話しすることはできませんでした。