はじめに
前回は、ストアアプリの起動をうながすライブタイルとトースト通知について解説しました。
ライブタイルとトースト通知は、ストアアプリが起動していない場合にユーザーに情報を提供する手段でした。今回紹介するバックグラウンド処理は、ストアアプリが起動していない状態で、ライブタイルやトーストなどの情報の通知を含めたさまざまな処理を実行する方法です。
例えば、ストアアプリがバックグラウンドに回った状態で音楽の再生やダウンロードを続ける、リアルタイムに情報を取得する、ネットワークの切断といったイベントに応じた処理は、バックグラウンド処理を実装することで実現可能です。
バックグラウンドタスク
バックグラウンドタスクとは、バックグラウンドで行う処理の中でも、音楽再生やダウンロードの継続などの特定の動作ではなく、プログラミングされたコードを実行する処理を指します。
バックグラウンドタスクを実行する場合、フォアグランドで動作するストアアプリに比べて制限があることを理解しなければなりません。制限とは利用できるリソースの制限、動作を行えるタイミングの制限、機能制限です。
リソースの制限
バックグラウンドにはリソースの制限があります。これはバックグラウンドで重い処理を走らせることでフォアグランドのストアアプリの動作が重くなったり、バッテリーを大量に消費してしまうことを避けるためです。
バックグラウンドのリソース制限はOSにより制御されるため、ストアアプリはこのリソース内で処理を終わらせる必要があります。また、ストアアプリがロック画面に表示されているかどうかによっても、与えられるリソースが異なります(ロック画面に表示されているストアアプリはそれ以外より多いリソースが与えられます)。
例えば、CPUの利用について以下のような制限があります。また端末がAC電源に接続されているか否かで、ネットワークリソースの制限を受けます。
ロック画面上にある場合 | CPU使用率クォータ:2秒 | 更新時間:15分 |
---|---|---|
ロック画面上にない場合 | CPU使用率クォータ:1秒 | 更新時間:2時間 |
詳しくは「バックグラウンドタスクによるアプリのサポート」ドキュメントの「バックグラウンドタスクリソースの制限」の項目を参照ください。
動作タイミングの制限
バックグラウンドタスクは、いつでも自由なタイミングで動作できるわけではなく、特定のトリガー(引き金となるイベント)を起点として動作します。
トリガーにはシステムイベントを引き金としたシステムトリガーや、タイマーで定期的(最短15分おき)に実行するタイマートリガーなどがあります。
主なシステムトリガー
- InternetAvailable:インターネットが利用可能になったタイミング
- NetworkStateChange:ネットワークの変更が行われたタイミング
- OnlineIdConnectedStateChange:アカウントに関連付けられたオンラインIDが変更になったタイミング
- SmsReceived:新しいSMSメッセージを受信したタイミング
- TimeZoneChange:タイムゾーンが変更されたタイミング
それ以外のトリガー
- ControlChannelTrigger:ネットワーク接続を維持した状態でメッセージを受信したタイミング
- TimeTrigger:タイマー処理で定期的に実行されるタイミング
- PushNotificationTrigger:プッシュ通知を受け取ったタイミング
それ以外にも、ロック画面に対応したストアアプリのみ利用できるトリガーも存在します。
ロック画面対応ストアアプリ限定のトリガー
- UserPresent:ユーザーが在席になったタイミング
- UserAway:ユーザーが不在になったタイミング
- ControlChannelReset:コントロールチャネルがリセットされたタイミング
- SessionConnected:セッションが接続されたタイミング
- LockScreenApplicationAdded:アプリのタイルがロック画面に追加されたタイミング
- LockScreenApplicationRemoved:アプリのタイルがロック画面から削除されたタイミング
機能の制限
バックグラウンドタスクを利用すればプログラム処理を実行できますが、ユーザーインターフェース(UI)の操作は行えません。
バックグラウンドタスク実行時にはローカルストレージなどに情報を保存して、ストアアプリがフォアグラウンドで起動した際にその情報をもとにUIを構成することは可能です。
バックグラウンドタスクのサンプル
1. バックグラウンドタスク用のプロジェクトを作成
まずは、ストアアプリのプロジェクトとは別のプロジェクトをバックグラウンド処理用に用意します。
画面右の「ソリューションエクスプローラー」のソリューション名の位置でマウスを右クリック→「追加」→「新しいプロジェクト」をクリックします。
プロジェクトは「Windows ランタイム コンポーネント」を選択し、任意の名前を付けて「OK」ボタンを押します。
これでソリューションエクスプローラーに、2つのプロジェクトが存在した状態になりました。