次の方法で共有


メンテナンス トリガーを使用する

重要な API

MaintenanceTrigger クラスを使用して、デバイスが接続されている間に軽量コードをバックグラウンドで実行する方法について説明します。

メンテナンス トリガー オブジェクトを作成する

この例では、デバイスが接続されている間にアプリを強化するためにバックグラウンドで実行できる軽量コードがあることを前提としています。 このトピックでは、 SystemTrigger に似た MaintenanceTrigger について説明します。

バックグラウンド タスク クラスの記述の詳細については、「インプロセス バックグラウンド タスクの作成と登録」または「アウトプロセス バックグラウンド タスクの作成と登録」を参照してください。

新しい MaintenanceTrigger オブジェクトを作成します。 2 番目のパラメーター OneShot は、メンテナンス タスクを 1 回だけ実行するか、定期的に実行し続けるかを指定します。 OneShot が true に設定されている場合、最初のパラメーター (FreshnessTime) は、バックグラウンド タスクをスケジュールする前に待機する分数を指定します。 もし OneShot が false に設定されている場合、FreshnessTime はバックグラウンドタスクの実行頻度を指定します。

FreshnessTime が 15 分未満に設定されている場合は、バックグラウンド タスクを登録しようとしたときに例外がスローされます。

このコード例では、1 時間に 1 回実行されるトリガーを作成します。

uint waitIntervalMinutes = 60;
MaintenanceTrigger taskTrigger = new MaintenanceTrigger(waitIntervalMinutes, false);
uint32_t waitIntervalMinutes{ 60 };
Windows::ApplicationModel::Background::MaintenanceTrigger taskTrigger{ waitIntervalMinutes, false };
unsigned int waitIntervalMinutes = 60;
MaintenanceTrigger ^ taskTrigger = ref new MaintenanceTrigger(waitIntervalMinutes, false);

(省略可能)条件を追加する

この例では、インターネットが使用可能になったとき (または利用可能になったとき) にメンテナンスが実行されるように、条件が InternetAvailable に設定されています。 可能なバックグラウンド タスク条件の一覧については、「 SystemConditionType」を参照してください。

次のコードは、メンテナンス タスク ビルダーに条件を追加します。

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

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

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

次のコードは、メンテナンス タスクを登録します。 バックグラウンド タスクは、 entryPointを指定するため、アプリとは別のプロセスで実行されることを前提としています。 バックグラウンド タスクがアプリと同じプロセスで実行される場合、 entryPointは指定しません。

string entryPoint = "Tasks.ExampleBackgroundTaskClass";
string taskName   = "Maintenance background task example";

BackgroundTaskRegistration task = RegisterBackgroundTask(entryPoint, taskName, taskTrigger, exampleCondition);
std::wstring entryPoint{ L"Tasks.ExampleBackgroundTaskClass" };
std::wstring taskName{ L"Maintenance background task example" };

Windows::ApplicationModel::Background::BackgroundTaskRegistration task{
    RegisterBackgroundTask(entryPoint, taskName, taskTrigger, exampleCondition) };
String ^ entryPoint = "Tasks.ExampleBackgroundTaskClass";
String ^ taskName   = "Maintenance background task example";

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

デスクトップを除くすべてのデバイス ファミリで、デバイスがメモリ不足になると、バックグラウンド タスクが終了する可能性があります。 メモリ不足の例外が表示されない場合、またはアプリが例外を処理しない場合、バックグラウンド タスクは警告なしで、OnCanceled イベントを発生させずに終了します。 これは、フォアグラウンドでのアプリのユーザー エクスペリエンスを確保するのに役立ちます。 バックグラウンド タスクは、このシナリオを処理するように設計する必要があります。

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

アプリの更新プログラムをリリースした後もユニバーサル Windows アプリが引き続き正常に実行されるようにするには、 RemoveAccess を呼び出し、更新後にアプリが起動したときに RequestAccessAsync を呼び出す必要があります。 詳細については、「バックグラウンド タスクの ガイドライン」を参照してください。

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