インプロセス バックグラウンド タスクの作成と登録Create and register an in-process background task

重要な APIImportant APIs

このトピックでは、アプリと同じプロセスで実行されるバックグラウンド タスクを作成して登録する方法について説明します。This topic demonstrates how to create and register a background task that runs in the same process as your app.

インプロセスのバック グラウンド タスクはアウトプロセスのバック グラウンド タスクよりも実装が簡単です。In-process background tasks are simpler to implement than out-of-process background tasks. ただし、インプロセスのバックグラウンド タスクでは回復力が低下します。However, they are less resilient. インプロセスのバックグラウンド タスクで実行中のコードがクラッシュすると、アプリがダウンします。If the code running in an in-process background task crashes, it will take down your app. また、DeviceUseTriggerDeviceServicingTriggerIoTStartupTask はインプロセス モデルで使用できないことに注意してください。Also note that DeviceUseTrigger, DeviceServicingTrigger and IoTStartupTask cannot be used with the in-process model. アプリケーション内で VoIP バックグラウンド タスクをアクティブ化することもできません。Activating a VoIP background task within your application is also not possible. これらのトリガーとタスクは、アウトプロセスのバックグラウンド タスク モデルを使用してサポートされています。These triggers and tasks are still supported using the out-of-process background task model.

バックグラウンド アクティビティは、実行時間制限を超えて実行された場合に、アプリのフォアグラウンド プロセス内で実行されているときでも終了できます。Be aware that background activity can be terminated even when running inside the app's foreground process if it runs past execution time limits. 特定の目的では、別のプロセスで実行するバックグラウンド タスクに作業を分離した場合の回復性が有用です。For some purposes the resiliency of separating work into a background task that runs in a separate process is still useful. バックグラウンドの作業をフォアグラウンド アプリケーションとは別のタスクとして保持することは、フォアグラウンド アプリケーションとの通信を必要としない作業にとって最適なオプションである可能性があります。Keeping background work as a task separate from the foreground application may be the best option for work that does not require communication with the foreground application.

基本事項Fundamentals

インプロセス モデルでは、アプリがフォアグラウンドまたはバックグラウンドで実行されるときの改善された通知によってアプリケーションのライフサイクルが強化されます。The in-process model enhances the application lifecycle with improved notifications for when your app is in the foreground or in the background. 2 つの新しいイベントはこれらの遷移のアプリケーション オブジェクトから使用できます。EnteredBackground LeavingBackgroundします。Two new events are available from the Application object for these transitions: EnteredBackground and LeavingBackground. これらのイベントは、アプリケーションの表示状態に基づくアプリケーションのライフサイクルに適合します。これらのイベントの詳細とアプリケーションのライフサイクルに与える影響については、アプリのライフサイクルをご覧ください。These events fit into the application lifecycle based on the visibility state of your application Read more about these events and how they affect the application lifecycle at App lifecycle.

大まかに言うと、EnteredBackground イベントは、アプリがバックグラウンドで実行されている間に実行されるコードを実行します。また、LeavingBackground イベントは、アプリがフォアグラウンドに移動したことを知るために処理します。At a high level, you will handle the EnteredBackground event to run your code that will execute while your app is running in the background, and handle LeavingBackground to know when your app has moved to the foreground.

バックグラウンド タスク トリガーを登録するRegister your background task trigger

インプロセスのバックグラウンド アクティビティの登録は、アウトプロセスのバックグラウンド アクティビティを登録する方法とほぼ同じです。In-process background activity is registered much the same as out-of-process background activity. すべてのバックグラウンド トリガーは、BackgroundTaskBuilder を使用した登録から始まります。All background triggers start with registration using the BackgroundTaskBuilder. ビルダーを使用すると、必要なすべての値を 1 か所で設定できるため、簡単にバックグラウンド タスクを登録できます。The builder makes it easy to register a background task by setting all required values in one place:

var builder = new BackgroundTaskBuilder();
builder.Name = "My Background Trigger";
builder.SetTrigger(new TimeTrigger(15, true));
// Do not set builder.TaskEntryPoint for in-process background tasks
// Here we register the task and work will start based on the time trigger.
BackgroundTaskRegistration task = builder.Register();

注意

ユニバーサル 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, you must call RemoveAccess and then call RequestAccessAsync when your app launches after being updated. 詳しくは、「バックグラウンド タスクのガイドライン」をご覧ください。For more information, see Guidelines for background tasks.

インプロセスのバックグラウンド アクティビティの場合は TaskEntryPoint. を設定しません。この値を設定しないと、OnBackgroundActivated() と呼ばれる、Application オブジェクトの新しい保護されたメソッドが既定のエントリ ポイントとして有効になります。For in-process background activities you do not set TaskEntryPoint. Leaving it blank enables the default entry point, a new protected method on the Application object called OnBackgroundActivated().

登録したトリガーは、SetTrigger メソッドで設定されたトリガーの種類に基づいて発生します。Once a trigger is registered, it will fire based on the type of trigger set in the SetTrigger method. 上記の例では、TimeTrigger が使用されています。これは、登録された時点から 15 分後に発生します。In the example above a TimeTrigger is used, which will fire fifteen minutes from the time it was registered.

どのようなときにタスクを実行するかという条件を追加する (省略可能)Add a condition to control when your task will run (optional)

トリガー イベントの発生後、どのようなときにタスクを実行するかという条件を追加することもできます。You can add a condition to control when your task will run after the trigger event occurs. たとえば、ユーザーが存在するときにだけタスクを実行する場合、UserPresent という条件を使います。For example, if you don't want the task to run until the user is present, use the condition UserPresent. 指定できる条件の一覧については、「SystemConditionType」をご覧ください。For a list of possible conditions, see SystemConditionType.

次のサンプル コードでは、"ユーザーの存在" を条件として割り当てています。The following sample code assigns a condition requiring the user to be present:

builder.AddCondition(new SystemCondition(SystemConditionType.UserPresent));

バックグラウンド アクティビティのコードを OnBackgroundActivated() に配置するPlace your background activity code in OnBackgroundActivated()

バック グラウンド アクティビティ コードを配置OnBackgroundActivatedを発生させるときに、バック グラウンドのトリガーに応答します。Put your background activity code in OnBackgroundActivated to respond to your background trigger when it fires. OnBackgroundActivated は、IBackgroundTask.Run と同様に処理することができます。OnBackgroundActivated can be treated just like IBackgroundTask.Run. メソッドには、 BackgroundActivatedEventArgsパラメーターで、すべてのものが含まれていますが、実行メソッドを提供します。The method has a BackgroundActivatedEventArgs parameter, which contains everything that the Run method delivers. たとえば、App.xaml.cs: でFor example, in App.xaml.cs:

using Windows.ApplicationModel.Background;

...

sealed partial class App : Application
{
  ...

  protected override void OnBackgroundActivated(BackgroundActivatedEventArgs args)
  {
      base.OnBackgroundActivated(args);
      IBackgroundTaskInstance taskInstance = args.TaskInstance;
      DoYourBackgroundWork(taskInstance);  
  }
}

豊富なOnBackgroundActivated例を参照してくださいホスト アプリケーションと同じプロセスで実行する app service の変換します。For a richer OnBackgroundActivated example, see Convert an app service to run in the same process as its host app.

バックグラウンド タスクの進捗状況と完了を処理するHandle background task progress and completion

タスクの進捗状況と完了は、マルチプロセスのバックグラウンド タスクの場合と同じ方法で監視できます (「バックグラウンド タスクの進捗状況と完了の監視」をご覧ください)。ただし、変数を使うと、より簡単にアプリで進捗状況または完了状態を追跡できます。Task progress and completion can be monitored the same way as for multi-process background tasks (see Monitor background task progress and completion) but you will likely find that you can more easily track them by using variables to track progress or completion status in your app. これは、アプリと同じプロセスでバックグラウンド アクティビティのコードを実行する利点の 1 つです。This is one of the advantages of having your background activity code running in the same process as your app.

バックグラウンド タスクの取り消しを処理するHandle background task cancellation

インプロセスのバックグラウンド タスクは、アウトプロセスのバックグラウンド タスクの場合と同じ方法で取り消すことができます (「取り消されたバックグラウンド タスクの処理」をご覧ください)。In-process background tasks are cancelled the same way as out-of-process background tasks are (see Handle a cancelled background task). 取り消しが発生する前に BackgroundActivated イベント ハンドラーを終了する必要があります。そうでないと、プロセス全体が終了します。Be aware that your BackgroundActivated event handler must exit before the cancellation occurs, or the whole process will be terminated. バックグラウンド タスクを取り消したときにフォアグラウンド アプリが予期せずに終了する場合は、取り消しが発生する前にハンドラーが終了していることを確認してください。If your foreground app closes unexpectedly when you cancel the background task, verify that your handler exited before the cancellation occured.

マニフェストThe manifest

アウトプロセスのバックグラウンド タスクとは異なり、インプロセスのバックグラウンド タスクを実行するためにパッケージ マニフェストにバックグラウンド タスクの情報を追加する必要はありません。Unlike out-of-process background tasks, you are not required to add background task information to the package manifest in order to run in-process background tasks.

要約と次のステップSummary and next steps

インプロセスのバックグラウンド タスクを作成する方法の基本を説明しました。You should now understand the basics of how to write a in-process background task.

API リファレンス、バックグラウンド タスクの概念的ガイダンス、バックグラウンド タスクを使ったアプリの作成に関する詳しい説明については、次の関連するトピックをご覧ください。See the following related topics for API reference, background task conceptual guidance, and more detailed instructions for writing apps that use background tasks.

詳細なバック グラウンド タスクの説明のトピックDetailed background task instructional topics

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

バック グラウンド タスクの API リファレンスBackground Task API Reference