バックグラウンド タスクのガイドラインGuidelines for background tasks

アプリがバックグラウンド タスクを実行するための要件を満たしていることを確認します。Ensure your app meets the requirements for running background tasks.

バックグラウンド タスクのガイダンスBackground task guidance

バックグラウンド タスクの開発時とアプリの公開前に、次のガイダンスについて検討します。Consider the following guidance when developing your background task, and before publishing your app.

バックグラウンド タスクを使ってバックグラウンドでメディアを再生する場合、Windows 10 バージョン 1607 で簡単に行うことができる機能強化について、「バックグラウンドでのメディアの再生」をご覧ください。If you use a background task to play media in the background, see Play media in the background for information about improvements in Windows 10, version 1607, that make it much easier.

プロセス内とプロセス外のバック グラウンド タスク。 Windows 10 version 1607 で導入されたプロセス内のバック グラウンド タスクフォア グラウンド アプリと同じプロセス内でバック グラウンドのコードを実行できます。In-process versus out-of-process background tasks: Windows 10, version 1607, introduced in-process background tasks which allows you to run background code in the same process as your foreground app. インプロセス バックグラウンド タスクとアウトプロセス バックグラウンド タスクのどちらを使用するかを決定するときは、以下の事項を検討してください。Consider the following factors when deciding whether to have in-process vs. out-of-process background tasks:

考慮事項Consideration 影響Impact
復元性Resilience バックグラウンド プロセスが別のプロセスで実行されている場合、バックグラウンド プロセスでクラッシュが発生してもフォアグラウンド アプリケーションがダウンしません。If your background process is running in another process, a crash in your background process won't take down your foreground application. さらに、実行時間制限を過ぎて実行された場合、アプリ内からでもバックグラウンド アクティビティを終了できます。Also, background activity can be terminated, even within your app, if it runs past execution time limits. フォアグラウンド プロセスとバックグラウンド プロセスが互いに通信する必要がない場合は、バックグラウンド処理をフォアグラウンド アプリとは別のタスクに分離することをお勧めします (インプロセス バックグラウンド タスクの主な利点の 1 つは、プロセス間通信が不要になることであるためです)。Separating background work into a task separate from the foreground app may be a better choice when it isn't necessary for the foreground and background processes to communicate with each other (since one of the main advantages of in-process background tasks are that they remove the need for inter-process communication).
シンプルさSimplicity インプロセス バックグラウンド タスクでは、プロセス間通信が不要のため、記述内容は複雑になりません。In-process background tasks don't require cross-process communication and are less complex to write.
使用可能なトリガーAvailable triggers プロセス内のバック グラウンド タスクは、次のトリガーをサポートしません。DeviceUseTriggerDeviceServicingTriggerIoTStartupTaskします。In-process background tasks don't support the following triggers: DeviceUseTrigger, DeviceServicingTrigger and IoTStartupTask.
VoIPVoIP インプロセス バックグラウンド タスクでは、アプリケーション内での VoIP バックグラウンド タスクのアクティブ化がサポートされていません。In-process background tasks don't support activating a VoIP background task within your application.

トリガーのインスタンスの数の制限: アプリを登録できるいくつかのトリガーのインスタンスの数の制限があります。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.

CPU クォータ: バック グラウンド タスクは、トリガーの種類に基づいて、取得、ウォール クロック使用時間の量によって制限されます。CPU quotas: Background tasks are limited by the amount of wall-clock usage time they get based on trigger type. ほとんどのトリガーは、使用時間がウォールクロック時間で 30 秒に制限されますが、負荷の高いタスクを完了するために最大 10 分実行できるトリガーもあります。Most triggers are limited to 30 seconds of wall-clock usage, while some have the ability to run up to 10 minutes in order to complete intensive tasks. バッテリの寿命を長くし、フォアグラウンド アプリのユーザー エクスペリエンスを高めるため、バックグラウンド タスクは軽量にしてください。Background tasks should be lightweight to save battery life and provide a better user experience for foreground apps. バックグラウンド タスクに適用されるリソースの制約については、「バックグラウンド タスクによるアプリのサポート」をご覧ください。See Support your app with background tasks for the resource constraints applied to background tasks.

バック グラウンド タスクを管理するには。 アプリでは、登録されているバック グラウンド タスクの一覧を取得、進行状況と完了ハンドラーの登録、およびそれらのイベントを適切に処理する必要があります。Manage background tasks: Your app should get a list of registered background tasks, register for progress and completion handlers, and handle those events appropriately. バックグラウンド タスク クラスでは、進行状況、キャンセル、完了を報告する必要があります。Your background task classes should report progress, cancellation, and completion. 詳しくは、「取り消されたバックグラウンド タスクの処理」と「バックグラウンド タスクの進捗状況と完了の監視」をご覧ください。For more info see Handle a cancelled background task, and Monitor background task progress and completion.

使用BackgroundTaskDeferral: バック グラウンド タスク クラスは、非同期コードを実行する場合は、遅延を使用して確認します。Use BackgroundTaskDeferral: If your background task class runs asynchronous code, make sure to use deferrals. それ以外の場合、バック グラウンド タスクが途中で終了するときに、実行メソッドを返します。 (またはOnBackgroundActivatedメソッドは、インプロセスのバック グラウンド タスクの場合)。Otherwise your background task may be terminated prematurely when the Run method returns (or the OnBackgroundActivated method in the case of in-process background tasks). 詳しくは、「アウトプロセス バックグラウンド タスクの作成と登録」をご覧くださいFor more information, see Create and register an out-of-process background task.

別の方法として、保留を 1 回要求し、async/await を使って、非同期メソッドの呼び出しを完了させることもできます。Alternatively, request one deferral, and use async/await to complete asynchronous method calls. await メソッドを呼び出した後、保留を閉じます。Close the deferral after the await method calls.

アプリケーション マニフェストを更新します。 アウト プロセスを実行するバック グラウンド タスクと共に使用するトリガーの種類と共に、アプリケーション マニフェスト内の各バック グラウンド タスクを宣言します。Update the app manifest: For background tasks that run out-of-process, declare each background task in the application manifest, along with the type of triggers it is used with. この宣言がないと、アプリでは実行時にバックグラウンド タスクを登録できません。Otherwise your app will not be able to register the background task at runtime.

複数のバック グラウンド タスクがある場合は、同じホスト プロセスで実行する必要があるか、または別のホスト プロセスに分離する必要があるかどうかを検討してください。If you have multiple background tasks, consider whether they should run in the same host process or be separated into different host processes. 1 つのバック グラウンド タスクでエラーが発生したときに別のバック グラウンド タスクが停止することが心配な場合は、別のホスト プロセスに配置します。Put them in separate host processes if you are concerned that a failure in one background task could bring down other background tasks. マニフェスト デザイナーの リソース グループ エントリを使用してバックグラウンド タスクを別のホスト プロセスにグループ化します。Use the Resource group entry in the manifest designer to group background tasks into different host processes.

リソース グループを設定するには、Package.appxmanifest デザイナーを開き、 [宣言] を選択し、 [アプリ サービス] 宣言を追加します。To set the Resource group, open the Package.appxmanifest designer, choose Declarations, and add an App Service declaration:

リソース グループの設定

リソース グループの設定の詳細については、「アプリケーション スキーマ リファレンス」を参照してください。See the application schema reference for more information about the resource group setting.

フォアグラウンド アプリと同じプロセスで実行されるバックグラウンド タスクは、アプリケーション マニフェストでの自身を宣言する必要はありません。Background tasks that run in the same process as the foreground app do not need to declare themselves in the application manifest. アウトプロセスで実行されるバックグラウンド タスクをマニフェストで宣言する方法について詳しくは、「アプリケーション マニフェストでのバックグラウンド タスクの宣言」をご覧ください。For more information about declaring background tasks that run out-of-process in the manifest, see Declare background tasks in the application manifest.

アプリの更新プログラムを準備します。 作成し、登録、アプリを更新する場合、 ServicingCompleteバック グラウンド タスク (を参照してくださいSystemTriggerType)、アプリの以前のバージョンのバック グラウンド タスクを登録解除と登録、新しいバージョンのバック グラウンド タスク。Prepare for app updates: If your app will be updated, create and register a ServicingComplete background task (see SystemTriggerType) to unregister background tasks for the previous version of the app, and register the background tasks for the new version. これは、フォアグラウンドで実行中のコンテキストの外で必要となる可能性があるアプリの更新を実行するのに適したタイミングです。This is also an appropriate time to perform app updates that may be necessary outside the context of running in the foreground.

バック グラウンド タスクを実行する要求:Request to execute background tasks:

重要な  以降 Windows 10 では、アプリが不要にバック グラウンド タスクを実行する前提条件として、ロック画面上にします。Important  Starting in Windows 10, apps are no longer required to be on the lock screen as a prerequisite to run background tasks.

ユニバーサル Windows プラットフォーム (UWP) アプリは、ロック画面にピン留めしなくても、サポートされているすべての種類のタスクを実行できます。Universal Windows Platform (UWP) apps can run all supported task types without being pinned to the lock screen. ただし、どの種類のバックグラウンド タスクを登録する場合でも、その前にアプリが RequestAccessAsync を呼び出す必要があります。However, apps must call RequestAccessAsync before registering any type of background task. ユーザーがデバイス設定でバックグラウンド タスクに対するアプリのアクセス許可を明示的に拒否した場合、このメソッドは BackgroundAccessStatus.DeniedByUser を返します。This method will return BackgroundAccessStatus.DeniedByUser if the user has explicitly denied background task permissions for your app in the device's settings. バックグラウンド アクティビティとバッテリー節約機能についてのユーザーの選択について詳しくは、「バックグラウンド アクティビティの最適化」をご覧ください。For more information on user choice around background activity and Battery Saver, see Optimize Background Activity.

バックグラウンド タスクのチェック リストBackground task checklist

両方のインプロセスおよびアウト プロセスのバック グラウンド タスクに適用されます。Applies to both in-process and out-of-process background tasks

  • バックグラウンド タスクを適切なトリガーに関連付けます。Associate your background task with the correct trigger.
  • 条件を追加して、バックグラウンド タスクが適切に実行されるようにします。Add conditions to help ensure your background task runs successfully.
  • バックグラウンド タスクの進行、完了、取り消しを処理します。Handle background task progress, completion, and cancellation.
  • アプリ起動時にバックグラウンド タスクを再登録します。Re-register your background tasks during app launch. これにより、初めてアプリを起動したときにそれらが登録されるようになります。This ensures that they are registered the first time the app is launched. また、ユーザーがバックグラウンド タスク実行機能を無効にしたかどうかを検出する方法も提供されます (登録に失敗した場合)。It also provides a way to detect whether the user has disabled your app's background execution capabilities (in the event registration fails).
  • バックグラウンド タスクの登録エラーを確認します。Check for background task registration errors. 必要に応じて、別のパラメーター値でバックグラウンド タスクをもう一度登録してみます。If appropriate, attempt to register the background task again with different parameter values.
  • デスクトップ以外のすべてのデバイス ファミリでは、デバイスのメモリが少なくなった場合、バックグラウンド タスクが終了することがあります。For all device families except desktop, if the device becomes low on memory, background tasks may be terminated. メモリ不足の例外が検出されないか、検出されてもアプリによって処理されない場合、バックグラウンド タスクは、警告や OnCanceled イベントの発生なしに終了します。If an out of memory exception is not surfaced, or the app does not handle it, then the background task will be terminated without warning and without raising the OnCanceled event. こうすることで、フォアグラウンドのアプリのユーザー エクスペリエンスが保証されます。This helps to ensure the user experience of the app in the foreground. バックグラウンド タスクは、このシナリオを処理できるように設計する必要があります。Your background task should be designed to handle this scenario.

プロセス外のバック グラウンド タスクにのみ適用されます。Applies only to out-of-process background tasks

  • Windows ランタイム コンポーネントでバックグラウンド タスクを作成します。Create your background task in a Windows Runtime Component.
  • バックグラウンド タスクでは、トースト、タイル、バッジの更新以外の UI は表示しません。Do not display UI other than toasts, tiles, and badge updates from the background task.
  • Run メソッドでは、各非同期メソッド呼び出しに対して保留を要求し、メソッドが終了した時点で閉じます。In the Run method, request deferrals for each asynchronous method call, and close them when the method is done. または、async/await で保留を 1 回使用します。Or, use one deferral with async/await.
  • 固定ストレージを使って、バックグラウンド タスクとアプリ間でデータを共有します。Use persistent storage to share data between the background task and the app.
  • アプリケーション マニフェストで、各バックグラウンド タスクと共に、バックグラウンド タスクで使うトリガーの種類を宣言します。Declare each background task in the application manifest, along with the type of triggers it is used with. エントリ ポイントとトリガーの種類が正しいことを確認します。Make sure the entry point and trigger types are correct.
  • アプリと同じコンテキストで実行する必要があるトリガー (ControlChannelTrigger など) を使う場合を除き、マニフェストでは Executable 要素を指定しないでください。Do not specify an Executable element in the manifest unless you are using a trigger that should be run in the same context as the app (such as the ControlChannelTrigger).

プロセス内のバック グラウンド タスクにのみ適用されます。Applies only to in-process background tasks

  • タスクをキャンセルするとき、キャンセルが発生するか、プロセス全体が終了する前に BackgroundActivated イベント ハンドラーが終了したことを確認してください。When cancelling a task, ensure that the BackgroundActivated event handler exits before the cancellation occurs or the whole process will be terminated.
  • バックグラウンド タスクの存続期間は短くします。Write background tasks that are short-lived. バックグラウンド タスクに使用できる時間は、ウォールクロック時間で 30 秒間に制限されています。Background tasks are limited to 30 seconds of wall-clock usage.
  • バックグラウンド タスクでのユーザー操作に依存することはできません。Do not rely on user interaction in background tasks.