バックグラウンド タスクによるアプリのサポートSupport your app with background tasks

このセクションの各トピックでは、トリガーに対応して軽量コードをバックグラウンドで実行する方法について説明します。The topics in this section show you how to make lightweight code run in the background in response to triggers. バックグラウンド タスクを使えば、アプリが中断されている、または実行されていないときに機能を提供できます。You can use background tasks to provide functionality when your app is suspended or not running. また、VOIP、メール、IM などのリアルタイム通信アプリにバックグラウンド タスクを使うこともできます。You can also use background tasks for real-time communication apps like VOIP, mail, and IM.

バックグラウンドでのメディア再生Playing media in the background

Windows 10 バージョン 1607 以降では、バックグラウンドでのオーディオ再生がより簡単になりました。Starting in Windows 10, version 1607, playing audio in the background is much easier. 詳しくは、「バックグラウンドでのメディアの再生」をご覧ください。See Play media in the background for more information.

インプロセスとアウトプロセスのバックグラウンド タスクIn-process and out-of-process background tasks

バック グラウンド タスクを実装するための 2 つの方法があります。There are two approaches to implementing background tasks:

  • プロセスで: アプリとそのバック グラウンド プロセスで実行される同じプロセスIn-process: the app and its background process run in the same process
  • プロセスの外: アプリとバック グラウンド プロセスは、[別のプロセスで実行されます。Out-of-process: the app and the background process run in separate processes.

インプロセス バックグラウンドのサポートは、バックグラウンド タスクの書き込みを簡略化するために、Windows 10 バージョン 1607 で導入されました。In-process background support was introduced in Windows 10, version 1607, to simplify writing background tasks. ただし現在でも、アウトプロセスのバックグラウンド タスクを書き込むことはできます。But you can still write out-of-process background tasks. インプロセスのバックグラウンド タスクとアウトプロセスのバックグラウンド タスクの使い分けに関する推奨事項については、「バックグラウンド タスクのガイドライン」をご覧ください。See Guidelines for background tasks for recommendations on when to write an in-process versus out-of-process background task.

プロセスのバック グラウンド タスクは、問題が生じた場合は、アプリのプロセスをバック グラウンド プロセスを取り込むことはできないために高めます。Out-of-process background tasks are more resilient because the background process can't bring down your app process if something goes wrong. アプリとバック グラウンド タスク間プロセスの間の通信を管理するより複雑な価格では、復元します。But the resiliency comes at the price of greater complexity to manage the cross-process communication between the app and the background task.

プロセスのバック グラウンド タスクは、別のプロセス (backgroundtaskhost.exe) で OS を実行しているIBackgroundTaskインターフェイスを実装する軽量のクラスとして実装されます。Out-of-process background tasks are implemented as lightweight classes that implement the IBackgroundTask interface that the OS runs in a separate process (backgroundtaskhost.exe). BackgroundTaskBuilderクラスを使用して、バック グラウンド タスクを登録します。Register a background task by using the BackgroundTaskBuilder class. このクラス名は、バックグラウンド タスクの登録時にエントリ ポイントを指定するために使用されます。The class name is used to specify the entry point when you registering the background task.

Windows 10 バージョン 1607 では、バックグラウンド タスクを作成しなくても、バックグラウンド アクティビティを有効にできます。In Windows 10, version 1607, you can enable background activity without creating a background task. 代わりに、前景色アプリケーションのプロセス内で直接背景コードを実行できます。You can instead run your background code directly inside the foreground application's process.

インプロセス バックグラウンド タスクの概要については、「インプロセス バックグラウンド タスクの作成と登録」をご覧ください。To get started quickly with in-process background tasks, see Create and register an in-process background task.

アウトプロセス バックグラウンド タスクの概要については、「アウトプロセス バックグラウンド タスクの作成と登録」をご覧ください。To get started quickly with out-of-process background tasks, see Create and register an out-of-process background task.

ヒント

Windows 10 以降では、バックグラウンド タスクを登録するための前提要件として、アプリをロック画面に配置する必要がなくなりました。Starting with Windows 10, you no longer need to place an app on the lock screen as a prerequisite for registering a background task for it.

システム イベントに対するバックグラウンド タスクBackground tasks for system events

アプリでは、SystemTrigger クラスを使ってバックグラウンド タスクを登録することにより、システムで生成されたイベントに応答することができます。Your app can respond to system-generated events by registering a background task with the SystemTrigger class. アプリは、次のシステム イベント トリガー (SystemTriggerType で定義されている) を使うことができます。An app can use any of the following system event triggers (defined in SystemTriggerType)

トリガー名Trigger name 説明Description
InternetAvailableInternetAvailable インターネットが利用可能になります。The Internet becomes available.
NetworkStateChangeNetworkStateChange コストや接続の変更などネットワークの変更が行われます。A network change such as a change in cost or connectivity occurs.
OnlineIdConnectedStateChangeOnlineIdConnectedStateChange アカウントに関連付けられたオンライン ID が変更されます。Online ID associated with the account changes.
SmsReceivedSmsReceived インストールされたモバイル ブロードバンド デバイスにより、新しい SMS メッセージが受け取られます。A new SMS message is received by an installed mobile broadband device.
TimeZoneChangeTimeZoneChange デバイスでタイム ゾーンが変更されます (たとえば、システムが夏時間に合わせて時刻を調整したとき)。The time zone changes on the device (for example, when the system adjusts the clock for daylight saving time).

詳しくは、「バックグラウンド タスクによるシステム イベントへの応答」をご覧ください。For more info see Respond to system events with background tasks.

バックグラウンド タスクの条件Conditions for background tasks

条件を追加すると、バックグラウンド タスクがトリガーされた後でも、バックグラウンド タスクを実行するタイミングを制御することができます。You can control when the background task runs, even after it is triggered, by adding a condition. バックグラウンド タスクは、トリガーされても、条件がすべて満たされるまで実行されません。Once triggered, a background task will not run until all of its conditions are met. 次の条件 (SystemConditionType 列挙型で表されます) を使うことができます。The following conditions (represented by the SystemConditionType enumeration) can be used.

条件名Condition name 説明Description
InternetAvailableInternetAvailable インターネットが利用可能である必要があります。The Internet must be available.
InternetNotAvailableInternetNotAvailable インターネットが利用不可である必要があります。The Internet must be unavailable.
SessionConnectedSessionConnected セッションが接続されている必要があります。The session must be connected.
SessionDisconnectedSessionDisconnected セッションが切断されている必要があります。The session must be disconnected.
UserNotPresentUserNotPresent ユーザーが不在である必要があります。The user must be away.
UserPresentUserPresent ユーザーが在席している必要があります。The user must be present.

バックグラウンド タスク BackgroundTaskBuilder.AddConditionInternetAvailable 条件を追加して、ネットワーク スタックが実行されるまで、バックグラウンド タスクのトリガーを遅らせます。Add the InternetAvailable condition to your background task BackgroundTaskBuilder.AddCondition to delay triggering the background task until the network stack is running. この条件では、ネットワークが利用可能になるまで、バック グラウンド タスクは実行されないために power が保存されます。This condition saves power because the background task won't execute until the network is available. この条件では、リアルタイムのアクティブ化は行われません。This condition does not provide real-time activation.

バック グラウンド タスクは、ネットワーク接続を必要とする場合は、ネットワークがバック グラウンド タスクの実行中にそのままのことを確認するIsNetworkRequestedを設定します。If your background task requires network connectivity, set IsNetworkRequested to ensure that the network stays up while the background task runs. これによって、デバイスがコネクト スタンバイ モードに入っている場合でも、タスクの実行中はネットワークを稼働状態に保つようにバックグラウンド タスク インフラストラクチャに指示されます。This tells the background task infrastructure to keep the network up while the task is executing, even if the device has entered Connected Standby mode. バック グラウンド タスクがIsNetworkRequestedを設定していない場合、[バック グラウンド タスクことはできません (たとえば、スマート フォンの画面がオフになっている場合。) に接続されているスタンバイ モードのときのネットワークにアクセスするにはIf your background task does not set IsNetworkRequested, then your background task will not be able to access the network when in Connected Standby mode (for example, when a phone's screen is turned off.)

バック グラウンド タスクの条件の詳細については、バック グラウンド タスクを実行するための条件を設定するを参照してください。For more info about background task conditions, see Set conditions for running a background task.

アプリケーション マニフェストの要件Application manifest requirements

アウトプロセスを実行するバックグラウンド タスクをアプリに正常に登録するには、バックグラウンド タスクをアプリケーション マニフェストで宣言する必要があります。Before your app can successfully register a background task that runs out-of-process, it must be declared in the application manifest. ホスト アプリと同じプロセスで実行されるバックグラウンド タスクについては、アプリケーション マニフェストで宣言する必要はありません。Background tasks that run in the same process as their host app do not need to be declared in the application manifest. 詳しくは、「アプリケーション マニフェストでのバックグラウンド タスクの宣言」をご覧ください。For more info see Declare background tasks in the application manifest.

バックグラウンド タスクBackground tasks

次のリアルタイム トリガーを使うと、バックグラウンドで軽量なカスタム コードを実行できます。The following real-time triggers can be used to run lightweight custom code in the background:

リアルタイム トリガーReal-time trigger 説明Description
コントロール チャネルControl Channel バックグラウンド タスクでは、ControlChannelTrigger を使って接続が有効な状態を維持し、コントロール チャネルでメッセージを受け取ることができます。Background tasks can keep a connection alive, and receive messages on the control channel, by using the ControlChannelTrigger. アプリがソケットをリッスンしている場合は、ControlChannelTrigger の代わりにソケット ブローカーを使うことができます。If your app is listening to a socket, you can use the Socket Broker instead of the ControlChannelTrigger. ソケット ブローカーの使用について詳しくは、「SocketActivityTrigger」をご覧ください。For more details on using the Socket Broker, see SocketActivityTrigger. ControlChannelTrigger は、Windows Phone ではサポートされていません。The ControlChannelTrigger is not supported on Windows Phone.
タイマーTimer バックグラウンド タスクは、15 分おきに実行できます。また、TimeTrigger を使って特定の時刻に実行するように設定することもできます。Background tasks can run as frequently as every 15 minutes, and they can be set to run at a certain time by using the TimeTrigger. 詳しくは、「タイマーでのバックグラウンド タスクの実行」をご覧ください。For more info see Run a background task on a timer.
プッシュ通知Push Notification バックグラウンド タスクは、PushNotificationTrigger に応答して、直接プッシュ通知を受け取ります。Background tasks respond to the PushNotificationTrigger to receive raw push notifications.

Note

ユニバーサル Windows アプリは、どの種類のバックグラウンド トリガーを登録する場合でも、先に RequestAccessAsync を呼び出す必要があります。Universal Windows apps must call RequestAccessAsync before registering any of the background trigger types.

更新プログラムのリリース後にユニバーサル Windows アプリが引き続き適切に実行されるようにするには、更新後にアプリが起動する際に、RemoveAccessRequestAccessAsync の順に呼び出します。To ensure that your Universal Windows app continues to run properly after you release an update, call RemoveAccess and then call RequestAccessAsync when your app launches after being updated. 詳しくは、「バックグラウンド タスクのガイドライン」をご覧ください。For more information, see Guidelines for background tasks.

トリガー インスタンスの数の制限: アプリが登録できる一部のトリガー インスタンスの数には制限があります。Limits on the number of trigger instances: There are limits to how many instances of some triggers an app can register. アプリが ApplicationTriggerMediaProcessingTrigger、および DeviceUseTrigger を登録できるのは、アプリのインスタンスごとに 1 回のみです。An app can only register ApplicationTrigger, MediaProcessingTrigger and DeviceUseTrigger once per instance of the app. アプリでこの制限を超えると、登録で例外がスローされます。If an app goes over this limit, registration will throw an exception.

システム イベント トリガーSystem event triggers

SystemTriggerType 列挙体は、次のシステム イベント トリガーを表します。The SystemTriggerType enumeration represents the following system event triggers:

トリガー名Trigger name 説明Description
UserPresentUserPresent ユーザーが在席になったら、バックグラウンド タスクがトリガーされます。The background task is triggered when the user becomes present.
UserAwayUserAway ユーザーが不在になったら、バックグラウンド タスクがトリガーされます。The background task is triggered when the user becomes absent.
ControlChannelResetControlChannelReset コントロール チャネルがリセットされたら、バックグラウンド タスクがトリガーされます。The background task is triggered when a control channel is reset.
SessionConnectedSessionConnected セッションが接続されたら、バックグラウンド タスクがトリガーされます。The background task is triggered when the session is connected.

以下のシステム イベント トリガーは、ユーザーがアプリをロック画面に配置した場合や、アプリをロック画面から削除した場合に、そのことを通知します。The following system event triggers signal when the user has moved an app on or off the lock screen.

トリガー名Trigger name 説明Description
LockScreenApplicationAddedLockScreenApplicationAdded アプリのタイルがロック画面に追加されます。An app tile is added to the lock screen.
LockScreenApplicationRemovedLockScreenApplicationRemoved アプリのタイルがロック画面から削除されます。An app tile is removed from the lock screen.

バックグラウンド タスク リソースの制限Background task resource constraints

バックグラウンド タスクは軽量です。Background tasks are lightweight. バックグラウンドの実行を最小限に抑えることにより、フォアグラウンド アプリでの最適なユーザー エクスペリエンスとバッテリ寿命が保証されます。Keeping background execution to a minimum ensures the best user experience with foreground apps and battery life. この設定は、リソース制約をバックグラウンド タスクに適用することにより、強制的に適用されます。This is enforced by applying resource constraints to background tasks.

バックグラウンド タスクに使用できる時間は、ウォールクロック時間で 30 秒間に制限されています。Background tasks are limited to 30 seconds of wall-clock usage.

メモリの制限Memory constraints

リソースには制約があるため (特にメモリの少ないデバイスの場合)、バックグラウンド タスクにはメモリの制限が存在する場合があり、これによってバックグラウンド タスクが使うことができるメモリの最大容量が決まります。Due to the resource constraints for low-memory devices, background tasks may have a memory limit that determines the maximum amount of memory the background task can use. バックグラウンド タスクがこの制限を超過する操作を試行すると、操作は失敗し、タスクで処理できるメモリ不足例外が生成されることがあります。If your background task attempts an operation that would exceed this limit, the operation will fail and may generate an out-of-memory exception--which the task can handle. メモリ不足例外がタスクで処理されない場合や、試行された操作がメモリ不足例外を生じさせる性質のものではなかった場合は、タスクが直ちに終了されます。If the task does not handle the out-of-memory exception, or the nature of the attempted operation is such that an out-of-memory exception was not generated, then the task will be terminated immediately.

上限 (あれば) を検出し、進行中のバックグラウンド タスクのメモリ使用量を監視するには、MemoryManager API を使って、現在のメモリ使用量と制限を問い合わせることができます。You can use the MemoryManager APIs to query your current memory usage and limit in order to discover your cap (if any), and to monitor your background task's ongoing memory usage.

メモリの少ないデバイスにおけるバックグラウンド タスクのあるアプリのデバイスごとの制限Per-device limit for apps with background tasks for low-memory devices

メモリに制約のあるデバイスでは、デバイスにインストールでき、いつでもバックグラウンド タスクを使うことができるアプリの数に制限があります。On memory-constrained devices, there is a limit to the number of apps that can be installed on a device and use background tasks at any given time. この数を超えると、すべてのバックグラウンド タスクを登録するのに必要な RequestAccessAsync の呼び出しが失敗します。If this number is exceeded, the call to RequestAccessAsync, which is required to register all background tasks, will fail.

バッテリー節約機能Battery Saver

バッテリー節約機能が有効であってもバックグラウンド タスクを実行しプッシュ通知を受信するようにアプリを設定していない限り、デバイスが外部電源に接続されていない状態でバッテリー残量が指定量を下回ると、バッテリー節約機能 (有効な場合) によりバックグラウンド タスクが実行されなくなります。Unless you exempt your app so that it can still run background tasks and receive push notifications when Battery Saver is on, the Battery Saver feature, when enabled, will prevent background tasks from running when the device is not connected to external power and the battery goes below a specified amount of power remaining. これによりバックグラウンド タスクを登録できなくなることはありません。This will not prevent you from registering background tasks.

ただし、エンタープライズ アプリでは、Microsoft ストアに公開されませんアプリを参照してください無期限バック グラウンドで実行する機能を使用して、バック グラウンドでバック グラウンド タスクまたは拡張実行セッションを無限に実行する方法について説明します。However, for enterprise apps, and apps that will not be published in the Microsoft Store, see Run in the background indefinitely to learn how to use a capabilities to run a background task or extended execution session in the background indefinitely.

リアルタイム通信に対するバックグラウンド タスク リソース保証Background task resource guarantees for real-time communication

リソース クォータがリアルタイム通信機能に干渉することがないように、ControlChannelTriggerPushNotificationTrigger を使ったバックグラウンド タスクごとに CPU リソース保証クォータが確保されます。To prevent resource quotas from interfering with real-time communication functionality, background tasks using the ControlChannelTrigger and PushNotificationTrigger receive guaranteed CPU resource quotas for every running task. リソース クォータは、先ほど説明したように、これらのバックグラウンド タスクに対して一定のままです。The resource quotas are as mentioned above, and remain constant for these background tasks.

アプリでは、特に何も行わなくても、ControlChannelTriggerPushNotificationTrigger を使ったバックグラウンド タスクごとにリソース保証クォータが確保されます。Your app doesn't have to do anything differently to get the guaranteed resource quotas for ControlChannelTrigger and PushNotificationTrigger background tasks. システムは、これらのタスクを常に重要なバックグラウンド タスクとして扱います。The system always treats these as critical background tasks.

メンテナンス トリガーMaintenance trigger

メンテナンス タスクは、デバイスが AC 電源に接続されているときにだけ実行されます。Maintenance tasks only run when the device is plugged in to AC power. 詳しくは、「メンテナンス トリガーの使用」をご覧ください。For more info see Use a maintenance trigger.

センサーとデバイスのバックグラウンド タスクBackground tasks for sensors and devices

アプリでは、DeviceUseTrigger クラスによりバックグラウンド タスクからセンサーと周辺デバイスにアクセスできます。Your app can access sensors and peripheral devices from a background task with the DeviceUseTrigger class. このトリガーは、データの同期や監視など長期間にわたる操作に使用できます。You can use this trigger for long-running operations such as data synchronization or monitoring. システム イベントのタスクとは異なり、DeviceUseTrigger タスクは、アプリがフォアグラウンドで実行されており条件が設定されていない場合にのみトリガーできます。Unlike tasks for system events, a DeviceUseTrigger task can only be triggered while your app is running in the foreground and no conditions can be set on it.

重要

DeviceUseTriggerDeviceServicingTrigger は、インプロセスのバックグラウンド タスクでは使用できません。The DeviceUseTrigger and DeviceServicingTrigger cannot be used with in-process background tasks.

時間がかかるファームウェア更新など、一部の重要なデバイス操作は、DeviceUseTrigger では実行できません。Some critical device operations, such as long running firmware updates, cannot be performed with the DeviceUseTrigger. このような操作は PC でのみ、DeviceServicingTrigger を使う特権アプリによってのみ実行できます。Such operations can be performed only on the PC, and only by a privileged app that uses the DeviceServicingTrigger. 特権アプリとは、これらの操作を実行する権限をデバイス製造元から与えられているアプリです。A privileged app is an app that the device's manufacturer has authorized to perform those operations. デバイス メタデータを使って、どのアプリがデバイスの特権アプリであるか (存在する場合) を指定します。Device metadata is used to specify which app, if any, has been designated as the privileged app for a device. 詳細については、「デバイスの同期と Microsoft ストア デバイス アプリ用の更新プログラムの使用」を参照してください。For more info, see Device sync and update for Microsoft Store device apps

バックグラウンド タスクの管理Managing background tasks

バックグラウンド タスクは、イベントとローカル ストレージを使って進行状況、完了、キャンセルをアプリに報告できます。Background tasks can report progress, completion, and cancellation to your app using events and local storage. アプリは、バックグラウンド タスクがスローした例外をキャッチしたり、アプリの更新中にバックグラウンド タスクの登録を行うこともできます。Your app can also catch exceptions thrown by a background task, and manage background task registration during app updates. 詳しくは、次のトピックをご覧ください。For more info see:

取り消されたバックグラウンド タスクの処理Handle a cancelled background task
バックグラウンド タスクの進捗状況と完了の監視Monitor background task progress and completion

アプリの起動中にバック グラウンド タスク登録を確認してください。Check your background task registration during app launch. アプリのグループ解除したバック グラウンド タスク BackgroundTaskBuilder.AllTasks に存在していることを確認します。Ensure that your app's ungrouped background tasks are present in BackgroundTaskBuilder.AllTasks. 存在しないものを再登録します。Re-register the ones that are not present. 不要になった、任意のタスクを解除します。Unregister any tasks that are no longer needed. これにより、アプリが起動するたびにすべてのバック グラウンド タスクの登録が最新であります。This ensures that all background tasks registrations are up-to-date every time the app is launched.

Windows 10 におけるマルチタスクの概念的ガイダンスConceptual guidance for multitasking in Windows 10

関連するバックグラウンド タスクのガイダンスRelated background task guidance