次の方法で共有


バックグラウンド タスクによるシステム イベントへの応答

重要な API

SystemTrigger イベントに応答するバックグラウンド タスクを作成する方法について説明します。

このトピックは、既にアプリにバックグラウンド タスク クラスが作られており、システムがトリガーするイベント (インターネットの可用性が変わる、ユーザーがログインするなど) に応じてこのタスクを実行する必要があることを前提としています。 ここでは、主に SystemTrigger クラスについて扱います。 バックグラウンド タスク クラスの作成について詳しくは、「インプロセス バックグラウンド タスクの作成と登録」または「アウトプロセス バックグラウンド タスクの作成と登録」をご覧ください。

SystemTrigger オブジェクトを作る

アプリ コードで新規の SystemTrigger オブジェクトを作ります。 1 つ目のパラメーター triggerType には、このバックグラウンド タスクをアクティブ化するシステム イベント トリガーの種類を指定します。 イベントの種類の一覧については、「SystemTriggerType」をご覧ください。

2 つ目のパラメーター OneShot では、次回システム イベントが発生したときに一度だけバックグラウンド タスクを実行するか、それともタスクの登録が解除されるまで、システム イベントが発生するたびにバックグラウンド タスクを実行するかを指定します。

次のコードでは、インターネットが利用可能になるたびにバックグラウンド タスクを実行するように指定しています。

SystemTrigger internetTrigger = new SystemTrigger(SystemTriggerType.InternetAvailable, false);
Windows::ApplicationModel::Background::SystemTrigger internetTrigger{
    Windows::ApplicationModel::Background::SystemTriggerType::InternetAvailable, false};
SystemTrigger ^ internetTrigger = ref new SystemTrigger(SystemTriggerType::InternetAvailable, false);

バックグラウンド タスクの登録

バックグラウンド タスクの登録関数を呼び出してバックグラウンド タスクを登録します。 バックグラウンド タスクの登録について詳しくは、「バックグラウンド タスクの登録」をご覧ください。

次のコードは、アウトプロセスで実行されるバックグラウンド プロセスのバックグラウンド タスクを登録するものです。 ホスト アプリと同じプロセスで実行されるバッグラウンド タスクを呼び出す場合は、entrypoint を設定しません。

string entryPoint = "Tasks.ExampleBackgroundTaskClass"; // Namespace name, '.', and the name of the class containing the background task
string taskName   = "Internet-based background task";

BackgroundTaskRegistration task = RegisterBackgroundTask(entryPoint, taskName, internetTrigger, exampleCondition);
std::wstring entryPoint{ L"Tasks.ExampleBackgroundTaskClass" }; // don't set for in-process background tasks.
std::wstring taskName{ L"Internet-based background task" };

Windows::ApplicationModel::Background::BackgroundTaskRegistration task{
    RegisterBackgroundTask(entryPoint, taskName, internetTrigger, exampleCondition) };
String ^ entryPoint = "Tasks.ExampleBackgroundTaskClass"; // don't set for in-process background tasks
String ^ taskName   = "Internet-based background task";

BackgroundTaskRegistration ^ task = RegisterBackgroundTask(entryPoint, taskName, internetTrigger, exampleCondition);

注意

ユニバーサル Windows プラットフォーム アプリは、どの種類のバックグラウンド トリガーを登録する場合でも、先に RequestAccessAsync を呼び出す必要があります。

更新プログラムのリリース後にユニバーサル Windows アプリが引き続き適切に実行されるようにするには、更新後にアプリが起動する際に、RemoveAccessRequestAccessAsync の順に呼び出す必要があります。 詳しくは、「バックグラウンド タスクのガイドライン」をご覧ください。

注意

バックグラウンド タスクの登録パラメーターは登録時に検証されます。 いずれかの登録パラメーターが有効でない場合は、エラーが返されます。 バックグラウンド タスクの登録が失敗するシナリオをアプリが適切に処理するようにします。タスクを登録しようとした後で、有効な登録オブジェクトを持っていることを前提として動作するアプリは、クラッシュする場合があります。  

注釈

バックグラウンド タスクの登録動作を確認するには、バックグラウンド タスクのサンプルをダウンロードしてください。

バックグラウンド タスクは、SystemTrigger イベントと MaintenanceTrigger イベントに応答して実行できます。ただし、その場合もアプリケーション マニフェストでバックグラウンド タスクを宣言する必要があります。 どの種類のバックグラウンド タスクを登録する場合でも、その前に RequestAccessAsync も呼び出す必要があります。

アプリでは、TimeTriggerPushNotificationTriggerNetworkOperatorNotificationTrigger の各イベントに応答するバックグラウンド タスクを登録することにより、アプリがフォアグラウンドにない場合でも、ユーザーとリアルタイムに通信できるようになります。 詳しくは、「バックグラウンド タスクによるアプリのサポート」をご覧ください。