バックグラウンド タスクによるアプリのサポート (HTML)
[ この記事は、Windows ランタイム アプリを作成する Windows 8.x および Windows Phone 8.x 開発者を対象としています。Windows 10 向けの開発を行っている場合は、「最新のドキュメント」をご覧ください]
このセクションのトピックでは、バックグラウンド タスクでトリガーに応答することによって、ユーザー独自の軽量コードをバックグラウンドで実行する方法について説明します。 バックグラウンド タスクは、OS がバックグラウンドで実行する別々の JavaScript ファイルです。バックグラウンド タスクを使えば、アプリが中断されている、または実行されていないときに機能を提供できます。JavaScript では、タイマーでバックグラウンド タスクを実行することもできます。
バックグラウンド タスクは、Windows.UI.WebUI.WebUIBackgroundTaskInstance 名前空間を使って、バックグラウンド タスクの現在のインスタンスに関する情報を取得します。BackgroundTaskBuilder オブジェクトを使ってバックグラウンド タスクを登録します。バックグラウンド タスク JavaScript ファイルは、バックグラウンド タスクの登録時にエントリ ポイントとして指定します。
バックグラウンド タスクを直ちに構築する場合は、「クイック スタート: バックグラウンド タスクの作成と登録」をご覧ください。
システム イベントに対するバックグラウンド タスク
アプリでは、SystemTrigger を使ってバックグラウンド タスクを登録することにより、システムで生成されたイベントに応答することができます。アプリは、ロック画面に配置されていなくても、次のシステム イベント トリガー (SystemTriggerType で定義) を使うことができます。
トリガー名 | 説明 |
---|---|
InternetAvailable |
インターネットが利用可能になります。 |
NetworkStateChange |
コストや接続の変更などネットワークの変更が行われます。 |
OnlineIdConnectedStateChange |
アカウントに関連付けられたオンライン ID が変更されます。 |
SmsReceived |
インストールされたモバイル ブロードバンド デバイスにより、新しい SMS メッセージが受け取られます。 |
TimeZoneChange |
デバイスでタイム ゾーンが変更されます (たとえば、システムが夏時間に合わせて時刻を調整したとき)。 |
詳しくは、「バックグラウンド タスクでシステム イベントに応答する方法」をご覧ください。
バックグラウンド タスクの条件
条件を追加すると、バックグラウンド タスクがトリガーされた後でも、バックグラウンド タスクを実行するタイミングを制御することができます。バックグラウンド タスクは、トリガーされても、条件がすべて満たされるまで実行されません。次の条件 (SystemConditionType 列挙型で表されます) を使うことができます。
条件名 | 説明 |
---|---|
InternetAvailable | インターネットが利用可能である必要があります。 |
InternetNotAvailable | インターネットが利用不可である必要があります。 |
SessionConnected | セッションが接続されている必要があります。 |
SessionDisconnected | セッションが切断されている必要があります。 |
詳しくは、「バックグラウンド タスクを実行するための条件を設定する方法」をご覧ください。
アプリケーション マニフェストの要件
アプリでバックグラウンド タスクが正常に登録されるには、アプリケーション マニフェストでバックグラウンド タスクを宣言する必要があります。詳しくは、「アプリケーション マニフェストでバックグラウンド タスクを宣言する方法」をご覧ください。
ロック画面対応アプリを対象とするバックグラウンド タスク
アプリは、ユーザーがリアルタイム情報をひとめで確認できるようにロック画面に配置することができます。次のリアルタイム トリガーを使えば、ロック画面上に配置されたアプリに対してバックグラウンドで軽量なカスタム コードを実行できます。
コントロール チャネル: バックグラウンド タスクでは、ControlChannelTrigger を使って接続が有効な状態を維持し、コントロール チャネルでメッセージを受け取ることができます。詳しくは、「コントロール チャネル トリガーの使用方法」をご覧ください。(コントロール チャネル バックグラウンド タスクは、C# または C++ でのみ実装可能です)。ControlChannelTrigger は、Windows Phone ではサポートされていません。
タイマー: バックグラウンド タスクは、15 分おきに実行できます。また、TimeTrigger を使って特定の時刻に実行するように設定することもできます。詳しくは、「タイマーでバックグラウンド タスクを実行する方法」をご覧ください。
プッシュ通知: バックグラウンド タスクは、PushNotificationTrigger に応答して、直接プッシュ通知を受け取ります。詳しくは、「直接通知を受け取る方法」をご覧ください。
注 Windows ストア アプリのみ。アプリでこれらのバックグラウンド タスクを使うには、まずロック画面にアプリを配置しておく必要があります。アプリは、RequestAccessAsync を呼び出すことによってロック画面のアクセスを要求できます。これにより、ロック画面上のアプリの "許可" または "不許可" をユーザーに求めるダイアログ ボックスが表示されます。アプリには、ロック画面のアクセスが一度だけ許可されます。以降の RequestAccessAsync の呼び出しはすべて無視されます。
注
Windows Phone ストア アプリは、ロック画面にピン留めしなくても、サポートされているすべてのバックグラウンド トリガーを使うことができます。ただし、どの種類のバックグラウンド トリガーを登録する場合でも、電話がその前に RequestAccessAsync を呼び出す必要があります。
更新のリリース後に Windows Phone アプリが引き続き適切に実行されるようにするには、更新された後にアプリを起動するときに RemoveAccess、RequestAccessAsync の順に呼び出す必要があります。詳しくは、「バックグラウンド タスクのガイドライン (Windows ランタイム アプリ)」をご覧ください。
ロック画面対応アプリを対象とするシステム イベント トリガー
注 SystemTriggerType 列挙型には、ロック画面対応アプリでしか使うことができない次のシステム イベント トリガーが含まれます。これらのシステム イベント トリガーを使ってアプリでバックグラウンド タスクを登録するには、アプリをロック画面に配置しておく必要があります。
トリガー名 | 説明 |
---|---|
UserPresent |
ユーザーが在席になったら、バックグラウンド タスクがトリガーされます。 |
UserAway |
ユーザーが不在になったら、バックグラウンド タスクがトリガーされます。 |
ControlChannelReset |
コントロール チャネルがリセットされたら、バックグラウンド タスクがトリガーされます。 |
SessionConnected |
セッションが接続されたら、バックグラウンド タスクがトリガーされます。 |
次のシステム イベント トリガーもロック画面対応アプリを対象としています。これらのトリガーは、アプリがロック画面上になくても登録できます。これにより、ユーザーがいつアプリをロック画面に配置したか、またアプリをロック画面から削除したか認識できるようになります。
トリガー名 | 説明 |
---|---|
LockScreenApplicationAdded |
アプリのタイルがロック画面に追加されます。 |
LockScreenApplicationRemoved |
アプリのタイルがロック画面から削除されます。 |
バックグラウンド タスク リソースの制限
バックグラウンド タスクは軽量です。バックグラウンドの実行を最小限に抑えることにより、フォアグラウンド アプリでの最適なユーザー エクスペリエンスとバッテリ寿命が保証されます。この設定は、リソース制約をバックグラウンド タスクに適用することにより、強制的に適用されます。
CPU の使用制限は次のとおりです。
CPU 使用率クォータ 更新時間 Windows アプリがロック画面上にない場合 1 秒
2 時間
Windows アプリがロック画面上にある場合 2 秒
15 分
Windows Phone アプリ 2 秒
15 分
バッテリ (DC 電源) で駆動している間、バックグラウンド タスクには、ネットワーク データの使用制限も適用されます。この制限は、ネットワーク インターフェイスが使うエネルギーの量に依存するため、デバイスとネットワークの環境によって異なります。ただし、見積もることはできます。
下表に、平均 1 Mbp の データ スループットに対応している WiFi ネットワークのリソースを使った場合のネットワーク データのスループットを示します。正確な制限を見積もるには、接続の 1 秒あたりの平均メガビット数 (Mbps) を乗算します。たとえば、アプリがロック画面に配置されている場合、10 Mbps WiFi 接続のアプリで、2 時間ごとに 25 MB のデータを使うことができます。この WiFi インターフェイスの例では、干渉が最小であることを前提としています。
更新間隔 15 分 2 時間 毎日 データ量の上限 (ロック画面上にある場合) 0.469 MB なし 45 MB データ量の上限 (ロック画面上にない場合) なし 0.625 MB 7.5 MB 注 デバイスが AC 電源に接続されているときは、ネットワーク データの使用制限は適用されません。ただし、CPU 使用率クォータはそのまま適用されます。同様に、ユーザーがフォアグラウンドでアプリの操作をしている間、アプリのバックグラウンド タスクに対する CPU とネットワークのリソース制約は一時中断されます。
Windows Phone ストア アプリのバックグラウンド タスク リソースに関する追加の制限
前のセクションで説明したリソース制限に加え、Windows Phone ストア アプリのバックグラウンド タスクには次の制限もあります。
メモリーの制限
電話フォーム ファクターのリソースには制約があるため (特にメモリの少ないデバイス)、Windows Phone アプリのバックグラウンド タスクにはメモリの制限があり、これによってバックグラウンド タスクが使うことができるメモリの最大容量が決まります。バックグラウンド タスクがこの制限を超えた場合、直ちに終了します。メモリ割り当ては、バックグラウンド タスクの種類と実行されているデバイスのシステム メモリ合計によって決まります。アプリの開発とテスト時にこれらの制限を考慮する必要があります。MemoryManager API を使って現在のメモリ使用量と制限を問い合わせ、実行時の使用量を調整することもできます。次の表に、デバイス上のシステム メモリの合計量ごとに、バックグラウンド タスクの各種類のメモリの上限 (MB 単位) を示します。
バックグラウンド タスクの種類 | 512 MB | 1 GB | 2 GB 以上 |
---|---|---|---|
位置 | 16 | 30 | 40 |
Bluetooth | 16 | 16 | 16 |
ServicingComplete | 10 | 10 | 10 |
その他のバックグラウンド タスク | 16 | 30 | 40 |
デバッグ時の制限 | 30 | 40 | 50 |
メモリの少ないデバイスにおけるバックグラウンド タスクのあるアプリのデバイスごとの制限
メモリが 512 MB の電話では、デバイスにインストールでき、いつでもバックグラウンド タスクを使うことができるアプリの数に制限があります。この数を超えると、Windows Phone のすべてのバックグラウンド タスクを登録するのに必要な RequestAccessAsync の呼び出しが失敗します。
バッテリー セーバー
Windows Phone では、デバイスが外部電源に接続されておらず、バッテリー残量が指定量を下回ると、バッテリー セーバー機能 (有効な場合) によりバックグラウンド タスクが実行されなくなります。これによりバックグラウンド タスクを登録できなくなることはありません。
メンテナンス トリガー
メンテナンス トリガーを使えば、15 分ごとに、アプリでタスクを実行することもできます。メンテナンス タスクは、ロック画面への配置を必要とせず、デバイスが AC 電源に接続されているときにだけ実行されます。詳しくは、「メンテナンス トリガーの使用方法」をご覧ください。
センサーとデバイスのバックグラウンド タスク
アプリでは、DeviceUseTrigger クラスによりバックグラウンド タスクからセンサーと周辺デバイスにアクセスできます。このトリガーは、データの同期や監視など長期間にわたる操作に使用できます。システム イベントのタスクとは異なり、DeviceUseTrigger タスクは、アプリがフォアグラウンドで実行しており条件が設定されていない場合にのみトリガーできます。実行しているデバイス (PC または携帯電話) に応じて、DeviceUseTrigger バックグラウンド タスクは異なる API をサポートし、異なるポリシーが適用されます。これらの違いについて詳しくは、「バックグラウンド タスクからのセンサーやデバイスへのアクセス」をご覧ください。
時間がかかるファームウェア更新など、一部の重要なデバイス操作は、DeviceUseTrigger では実行できません。このような操作は PC でのみ、DeviceServicingTrigger を使う特権アプリによってのみ実行できます。特権アプリとは、これらの操作を実行する権限をデバイス製造元から与えられているアプリです。デバイス メタデータを使って、どのアプリがデバイスの特権アプリであるか (存在する場合) を指定します。詳しくは、「Windows ストア デバイス アプリによるデバイスの同期と更新」をご覧ください。
バックグラウンド タスクの管理
バックグラウンド タスクは、イベントとローカル ストレージを使って進行状況、完了、キャンセルをアプリに報告できます。アプリは、バックグラウンド タスクがスローした例外をキャッチしたり、アプリの更新中にバックグラウンド タスクの登録を行うこともできます。詳しくは、次のトピックをご覧ください。
関連トピック
Windows 8 におけるマルチタスクの概念的ガイダンス
ロック画面の UI のガイダンス
関連するバックグラウンド タスクのガイダンス
Windows ストア アプリで一時停止イベント、再開イベント、バックグラウンド イベントをトリガーする方法 (デバッグ時)