次の方法で共有


バックグラウンド タスクを実行するための条件を設定する

重要な API

バックグラウンド タスクを実行するタイミングを制御する条件を設定する方法について説明します。

バックグラウンド タスクが成功するには、バックグラウンド タスクが特定の条件を満たす必要がある場合があります。 バックグラウンド タスクを登録するときに 、SystemConditionType で指定された 1 つ以上の条件を指定できます。 条件は、トリガーが起動された後にチェックされます。 バックグラウンド タスクはキューに登録されますが、必要なすべての条件が満たされるまで実行されません。

バックグラウンド タスクに条件を設定すると、タスクが不必要に実行されるのを防ぐことで、バッテリの寿命と CPU を節約できます。 たとえば、バックグラウンド タスクがタイマーで実行され、インターネット接続が必要な場合は、タスクを登録する前に、TaskBuilderInternetAvailable 条件を追加します。 これは、タイマーが経過し、インターネットが使用可能な場合にのみバックグラウンド タスクを実行することによって、タスクがシステム リソース バッテリ寿命を不必要に使用するのを防ぐのに役立ちます。

同じ TaskBuilderAddCondition を複数回呼び出すことで、複数の条件を組み合わせることもできます。 UserPresentUserNotPresent などの競合する条件を追加しないように注意してください。

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

このトピックでは、アプリに既にバックグラウンド タスクが関連付けられているものと、アプリに taskBuilder という名前の BackgroundTaskBuilder オブジェクトを作成するコードが既に含まれていることを前提としています。 最初 にバックグラウンド タスクを作成する必要がある場合は、「インプロセスバックグラウンド タスク作成と登録」または「アウトプロセスバックグラウンド タスクの作成と登録 」を参照してください。

このトピックは、アウトプロセスで実行されるバックグラウンド タスクと、フォアグラウンド アプリと同じプロセスで実行されるバックグラウンド タスクに適用されます。

条件を追加する前に、バックグラウンド タスクを実行するために有効にする必要がある条件を表す SystemCondition オブジェクトを作成します。 コンストラクターで、 SystemConditionType 列挙値で満たす必要がある条件を指定します。

次のコードは、InternetAvailable 条件を指定する SystemCondition オブジェクトを作成します。

SystemCondition internetCondition = new SystemCondition(SystemConditionType.InternetAvailable);
Windows::ApplicationModel::Background::SystemCondition internetCondition{
    Windows::ApplicationModel::Background::SystemConditionType::InternetAvailable };
SystemCondition ^ internetCondition = ref new SystemCondition(SystemConditionType::InternetAvailable);

バックグラウンド タスクに SystemCondition オブジェクトを追加する

条件を追加するには、BackgroundTaskBuilder オブジェクトで AddCondition メソッドを呼び出し、SystemCondition オブジェクトを渡します。

次のコードでは 、taskBuilder を使用して InternetAvailable 条件を追加します。

taskBuilder.AddCondition(internetCondition);
taskBuilder.AddCondition(internetCondition);
taskBuilder->AddCondition(internetCondition);

バックグラウンド タスクを登録する

これで、 Register メソッドを使用してバックグラウンド タスクを登録できるようになりました。バックグラウンド タスクは、指定された条件が満たされるまで開始されません。

次のコードは、タスクを登録し、結果として得られる BackgroundTaskRegistration オブジェクトを格納します。

BackgroundTaskRegistration task = taskBuilder.Register();
Windows::ApplicationModel::Background::BackgroundTaskRegistration task{ recurringTaskBuilder.Register() };
BackgroundTaskRegistration ^ task = taskBuilder->Register();

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

バックグラウンド タスクに複数の条件を設定する

複数の条件を追加するために、アプリは AddCondition メソッドを複数呼び出します。 これらの呼び出しは、タスクの登録が有効になる前に行う必要があります。

競合する条件をバックグラウンド タスクに追加しないように注意してください。

次のスニペットは、バックグラウンド タスクの作成と登録のコンテキストにおける複数の条件を示しています。

// Set up the background task.
TimeTrigger hourlyTrigger = new TimeTrigger(60, false);

var recurringTaskBuilder = new BackgroundTaskBuilder();

recurringTaskBuilder.Name           = "Hourly background task";
recurringTaskBuilder.TaskEntryPoint = "Tasks.ExampleBackgroundTaskClass";
recurringTaskBuilder.SetTrigger(hourlyTrigger);

// Begin adding conditions.
SystemCondition userCondition     = new SystemCondition(SystemConditionType.UserPresent);
SystemCondition internetCondition = new SystemCondition(SystemConditionType.InternetAvailable);

recurringTaskBuilder.AddCondition(userCondition);
recurringTaskBuilder.AddCondition(internetCondition);

// Done adding conditions, now register the background task.

BackgroundTaskRegistration task = recurringTaskBuilder.Register();
// Set up the background task.
Windows::ApplicationModel::Background::TimeTrigger hourlyTrigger{ 60, false };

Windows::ApplicationModel::Background::BackgroundTaskBuilder recurringTaskBuilder;

recurringTaskBuilder.Name(L"Hourly background task");
recurringTaskBuilder.TaskEntryPoint(L"Tasks.ExampleBackgroundTaskClass");
recurringTaskBuilder.SetTrigger(hourlyTrigger);

// Begin adding conditions.
Windows::ApplicationModel::Background::SystemCondition userCondition{
    Windows::ApplicationModel::Background::SystemConditionType::UserPresent };
Windows::ApplicationModel::Background::SystemCondition internetCondition{
    Windows::ApplicationModel::Background::SystemConditionType::InternetAvailable };

recurringTaskBuilder.AddCondition(userCondition);
recurringTaskBuilder.AddCondition(internetCondition);

// Done adding conditions, now register the background task.
Windows::ApplicationModel::Background::BackgroundTaskRegistration task{ recurringTaskBuilder.Register() };
// Set up the background task.
TimeTrigger ^ hourlyTrigger = ref new TimeTrigger(60, false);

auto recurringTaskBuilder = ref new BackgroundTaskBuilder();

recurringTaskBuilder->Name           = "Hourly background task";
recurringTaskBuilder->TaskEntryPoint = "Tasks.ExampleBackgroundTaskClass";
recurringTaskBuilder->SetTrigger(hourlyTrigger);

// Begin adding conditions.
SystemCondition ^ userCondition     = ref new SystemCondition(SystemConditionType::UserPresent);
SystemCondition ^ internetCondition = ref new SystemCondition(SystemConditionType::InternetAvailable);

recurringTaskBuilder->AddCondition(userCondition);
recurringTaskBuilder->AddCondition(internetCondition);

// Done adding conditions, now register the background task.
BackgroundTaskRegistration ^ task = recurringTaskBuilder->Register();

注釈

バックグラウンド タスクの条件を選択して、必要なときにのみ実行され、実行すべきではない場合は実行されないようにします。 さまざまなバックグラウンド タスク条件の説明については、 SystemConditionType を参照してください。