ApplicationTrigger を使用して、アプリ内からバックグラウンド タスクをアクティブ化する方法について説明します。
アプリケーション トリガーを作成する方法の例については、この の例を参照してください。
このトピックでは、アプリケーションからアクティブ化するバックグラウンド タスクがあることを前提としています。 バックグラウンド タスクがまだない場合は、BackgroundActivity.csにサンプルのバックグラウンド タスクがあります。 または、「プロセス外のバックグラウンド タスク を作成して登録する」の手順に従って、作成してください。
アプリケーション トリガーを使用する理由
ApplicationTrigger を使用して、フォアグラウンド アプリとは別のプロセスでコードを実行します。
ApplicationTrigger は、ユーザーがフォアグラウンド アプリを閉じた場合でも、バックグラウンドで実行する必要がある作業がアプリにある場合に適しています。 アプリを閉じたときにバックグラウンド処理を停止する場合、またはフォアグラウンド プロセスの状態に関連付ける必要がある場合は、代わりに拡張実行
アプリケーション トリガーを作成する
新しい ApplicationTriggerを作成します。 次のスニペットのように、フィールドに格納できます。 これは便宜上、トリガーを通知するときに新しいインスタンスを作成する必要がないようにするためです。 ただし、任意の ApplicationTrigger インスタンスを使用してトリガーを通知できます。
// _AppTrigger is an ApplicationTrigger field defined at a scope that will keep it alive
// as long as you need to trigger the background task.
// Or, you could create a new ApplicationTrigger instance and use that when you want to
// trigger the background task.
_AppTrigger = new ApplicationTrigger();
// _AppTrigger is an ApplicationTrigger field defined at a scope that will keep it alive
// as long as you need to trigger the background task.
// Or, you could create a new ApplicationTrigger instance and use that when you want to
// trigger the background task.
Windows::ApplicationModel::Background::ApplicationTrigger _AppTrigger;
// _AppTrigger is an ApplicationTrigger field defined at a scope that will keep it alive
// as long as you need to trigger the background task.
// Or, you could create a new ApplicationTrigger instance and use that when you want to
// trigger the background task.
ApplicationTrigger ^ _AppTrigger = ref new ApplicationTrigger();
(省略可能)条件を追加する
バックグラウンド タスク条件を作成して、タスクの実行タイミングを制御できます。 条件により、条件が満たされるまでバックグラウンド タスクが実行されなくなります。 詳細については、「バックグラウンド タスクを実行するための条件を設定する」を参照してください。
この例では、条件が InternetAvailable
SystemCondition internetCondition = new SystemCondition(SystemConditionType.InternetAvailable);
Windows::ApplicationModel::Background::SystemCondition internetCondition{
Windows::ApplicationModel::Background::SystemConditionType::InternetAvailable };
SystemCondition ^ internetCondition = ref new SystemCondition(SystemConditionType::InternetAvailable)
条件とバックグラウンド トリガーの種類の詳細については、「バックグラウンド タスクでのアプリのサポート」を参照してください。
RequestAccessAsync() を呼び出す
var requestStatus = await Windows.ApplicationModel.Background.BackgroundExecutionManager.RequestAccessAsync();
if (requestStatus != BackgroundAccessStatus.AlwaysAllowed)
{
// Depending on the value of requestStatus, provide an appropriate response
// such as notifying the user which functionality won't work as expected
}
バックグラウンド タスクを登録する
バックグラウンド タスク登録関数を呼び出して、バックグラウンド タスクを登録します。 バックグラウンド タスクの登録の詳細と、以下のサンプル コードで RegisterBackgroundTask() メソッドの定義を確認するには、「バックグラウンド タスクを登録する」を参照してください。
アプリケーション トリガーを使用してフォアグラウンド プロセスの有効期間を延長することを検討している場合は、代わりに拡張実行
string entryPoint = "Tasks.ExampleBackgroundTaskClass";
string taskName = "Example application trigger";
BackgroundTaskRegistration task = RegisterBackgroundTask(entryPoint, taskName, appTrigger, internetCondition);
std::wstring entryPoint{ L"Tasks.ExampleBackgroundTaskClass" };
std::wstring taskName{ L"Example application trigger" };
Windows::ApplicationModel::Background::BackgroundTaskRegistration task{
RegisterBackgroundTask(entryPoint, taskName, appTrigger, internetCondition) };
String ^ entryPoint = "Tasks.ExampleBackgroundTaskClass";
String ^ taskName = "Example application trigger";
BackgroundTaskRegistration ^ task = RegisterBackgroundTask(entryPoint, taskName, appTrigger, internetCondition);
バックグラウンド タスク登録パラメーターは、登録時に検証されます。 登録パラメーターのいずれかが無効な場合は、エラーが返されます。 バックグラウンド タスクの登録が失敗するシナリオをアプリが適切に処理していることを確認します。代わりに、アプリがタスクの登録を試みた後に有効な登録オブジェクトを持つことに依存している場合は、クラッシュする可能性があります。
バックグラウンド タスクをトリガーする
バックグラウンド タスクをトリガーする前に、BackgroundTaskRegistration
ApplicationTrigger.RequestAsync
ApplicationTrigger.RequestAsync
var result = await _AppTrigger.RequestAsync();
バックグラウンド タスクのリソースを管理する
BackgroundExecutionManager.RequestAccessAsync を使用して、ユーザーがアプリのバックグラウンド アクティビティを制限する必要があると判断したかどうかを判断します。 バッテリー使用量に注意し、ユーザーが必要とするアクションを完了する必要がある場合にのみバックグラウンドで実行してください。 ユーザーがバックグラウンド アクティビティの設定を制御する方法の詳細については、「バックグラウンド アクティビティの を最適化する」を参照してください。
- メモリ: アプリのメモリとエネルギーの使用を調整することは、オペレーティング システムでバックグラウンド タスクを実行できるようにするための鍵となります。 メモリ管理 API を使用して、バックグラウンド タスクで使用されているメモリの量を確認します。 バックグラウンド タスクで使用されるメモリが多いほど、別のアプリがフォアグラウンドにあるときに OS の実行を維持するのが困難になります。 ユーザーは最終的に、アプリが実行できるすべてのバックグラウンド アクティビティを制御し、アプリがバッテリーの使用に与える影響を可視化します。
- CPU 時間: バックグラウンド タスクは、トリガーの種類に基づいて取得されるウォール クロックの使用時間の量によって制限されます。 アプリケーション トリガーによってトリガーされるバックグラウンド タスクは、約 10 分に制限されます。
バックグラウンド タスクに適用されるリソース制約については、「バックグラウンド タスクを使用したアプリのサポート」を参照してください。
注釈
Windows 10 以降では、バックグラウンド タスクを利用するために、ユーザーがロック画面にアプリを追加する必要がなくなりました。
バックグラウンド タスクは、最初に RequestAccessAsync を呼び出した場合にのみ、ApplicationTrigger を使用して実行されます。
関連トピック
- バックグラウンドタスクのガイドライン
- バックグラウンド タスクのコード サンプル
- インプロセス バックグラウンド タスクを作成して登録します。
- プロセス外のバックグラウンド タスクを作成して登録
- バックグラウンド タスクの をデバッグする
- アプリケーション マニフェスト でバックグラウンド タスクを宣言する
- アプリがバックグラウンド に移動したときにメモリを解放する
- 取り消されたバックグラウンド タスクの を処理する
- UWP アプリで一時停止、再開、およびバックグラウンド イベントをトリガーする方法 (デバッグ時)
- バックグラウンド タスクの進行状況と完了の を監視する
- 拡張実行 を使用してアプリの中断を延期する
- バックグラウンド タスク を登録する
- バックグラウンド タスクを使用してシステム イベントに応答
- バックグラウンド タスク を実行するための条件を設定する
- バックグラウンド タスクからライブ タイルを更新
- メンテナンス トリガー を使用する