次の方法で共有


バックグラウンド タスクを使用してシステム イベントに応答する

重要な API

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

このトピックでは、アプリ用に作成されたバックグラウンド タスク クラスがあり、インターネットの可用性が変更されたときやユーザーがログインしたときなど、システムによってトリガーされたイベントに応答してこのタスクを実行する必要があることを前提としています。 このトピックでは、 SystemTrigger クラスについて説明します。 バックグラウンド タスク クラスの記述の詳細については、「インプロセス バックグラウンド タスクの作成と登録」または「アウトプロセス バックグラウンド タスクの作成と登録」を参照してください。

SystemTrigger オブジェクトを作成する

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

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

次のコードは、インターネットが使用可能になったときにバックグラウンド タスクを実行することを指定します。

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 アプリが引き続き正常に実行されるようにするには、RemoveAccess 呼び出し、更新後にアプリが起動したときに RequestAccessAsync を呼び出す必要があります。 詳細については、「バックグラウンド タスクガイドライン」を参照してください。

バックグラウンド タスク登録パラメーターは、登録時に検証されます。 登録パラメーターのいずれかが無効な場合は、エラーが返されます。 バックグラウンド タスクの登録が失敗するシナリオをアプリが適切に処理していることを確認します。代わりに、アプリがタスクの登録を試みた後に有効な登録オブジェクトを持つことに依存している場合は、クラッシュする可能性があります。  

注釈

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

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

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