タイマーでバックグラウンド タスクを実行する方法 (HTML)
[ この記事は、Windows ランタイム アプリを作成する Windows 8.x および Windows Phone 8.x 開発者を対象としています。Windows 10 向けの開発を行っている場合は、「最新のドキュメント」をご覧ください]
1 回限りのバックグラウンド タスクをスケジュールする方法、または Windows ストア アプリと関連付けられた定期的なバックグラウンド タスクを実行する方法について学習します。 ユーザーがアプリをロック画面に置いている場合、アプリは 15 分おき (Windows) または 30 分おき (Windows Phone) に実行されるバックグラウンド タスクを登録できます。たとえば、バックグラウンド タスクを使って、定期的なタイルの更新またはバッジの更新を実行できます。
理解しておく必要があること
テクノロジ
必要条件
- この例は、アプリをサポートするために、定期的に、または特定の時刻に実行する必要があるバックグラウンド タスクがあることを前提にしています。Windows では、RequestAccessAsync を呼び出してアプリをロック画面に配置することを要求し、ユーザーが確認メッセージを受け入れた場合、バックグラウンド タスクは TimeTrigger を使ってのみ実行されます。Windows Phone では、RequestAccessAsync を呼び出す必要がありますが、ユーザーに確認メッセージは表示されません。詳しくは、「ロック画面でのタイルの表示」をご覧ください。
- このトピックでは、バックグラウンド タスクのエントリ ポイントとして使う Run メソッドも含めて、既にバックグラウンド タスク クラスが作られていることを前提とします。バックグラウンド タスクを直ちに構築する場合は、「クイック スタート: バックグラウンド タスクの作成と登録」をご覧ください。条件とトリガーについて詳しくは、「バックグラウンド タスクによるアプリのサポート」をご覧ください。
手順
ステップ 1: 時刻のトリガーを作る
新しい TimeTrigger を作ります。2 つ目のパラメーター (OneShot) では、バックグラウンド タスクを一度だけ実行するか、または定期的に実行を続けるかを指定します。OneShot を true に設定する場合は、1 つ目のパラメーター (FreshnessTime) に、バックグラウンド タスクをスケジュールするまで待機する時間 (分単位) を指定します。OneShot を false に設定した場合は、FreshnessTime に、バックグラウンド タスクを実行する間隔を指定します。
Windows 8 には、バックグラウンド タスクを実行するための 15 分刻みのタイマーが組み込まれています。Windows Phone では間隔が 30 分であることに注意してください。
FreshnessTime が 15 分に設定され、OneShot が true の場合、タスクは登録された時点から 0 ~ 15 分の間に一度実行されます。
FreshnessTime が 15 分に設定され、OneShot が false の場合、タスクは登録された時点から 0 ~ 15 分の間に実行され、その後 15 分ごとに実行されます。
注 FreshnessTime が 15 分未満に設定された場合、バックグラウンド タスクの登録が試行されたときに例外がスローされます。
たとえば、次のトリガーではバックグラウンド タスクは 1 時間に 1 回実行されます。
var hourlyTrigger = new Windows.ApplicationModel.Background.TimeTrigger(60, false);
ステップ 2: (省略可能) 条件の追加
いつタスクを実行するかを制御するバックグラウンド タスクの条件を必要に応じて追加します。条件を指定すると、条件が満たされるまではバックグラウンド タスクが実行されないようにすることができます。詳しくは「バックグラウンド タスクを実行するための条件を設定する方法」をご覧ください。
この例では、条件が UserPresent に設定されているため、トリガー後、ユーザーがアクティブになったときにタスクが 1 回だけ実行されます。指定できる条件の一覧については、「SystemConditionType」をご覧ください。
次のコードでは、バックグラウンド タスクに条件を追加しています。
var userCondition = new Windows.ApplicationModel.Background.SystemCondition(Windows.ApplicationModel.Background.SystemConditionType.UserPresent);
ステップ 3: ロック画面へのアクセスを要求する
TimeTrigger バックグラウンド タスクの登録を試みる前に、RequestAccessAsync を呼び出して、ロック画面への追加許可をユーザーに求めます。
Windows では、次のコードにより、ユーザーにアプリをロック画面に追加するように要求するダイアログ ボックスが表示されます。電話では、アプリにバックグラウンド タスクを実行する許可を与えることだけがシステムに要求されます。
Windows.ApplicationModel.Background.BackgroundExecutionManager.RequestAccessAsync();
注 アプリでは、ロック画面へのアクセスを 1 回だけ求めることができます。ユーザーは 2 つのオプションの一方のみを選ぶことができるので、その設定は定義済みとなります。それ以上 RequestAccessAsync を呼び出しても、それは無視されます。
ステップ 4: バックグラウンド タスクの登録
バックグラウンド タスクの登録関数を呼び出してバックグラウンド タスクを登録します。バックグラウンド タスクの登録について詳しくは、「バックグラウンド タスクを登録する方法」をご覧ください。
次のコードでは、バックグラウンド タスクを登録しています。
var entryPoint = “js\\ExampleBackgroundTask.js”;
var taskName = “Example hourly background task”;
var task = RegisterBackgroundTask(entryPoint, taskName, hourlyTrigger, userCondition);
注
Windows 8.1 以降では、バックグラウンド タスクの登録パラメーターが登録時に検証されます。いずれかの登録パラメーターが有効でない場合は、エラーが返されます。アプリは、バックグラウンド タスクの登録が失敗するシナリオを処理できる必要があります。たとえば、条件ステートメントを使って登録エラーを確認し、失敗した登録は別のパラメーター値を使ってやり直してみます。
注釈
注 Windows では、タイム トリガーで登録されたバックグラウンド タスクは、ユーザーがアプリをロック画面に追加している場合 (アプリからのアクセス要求に対しユーザーが許可した場合) にのみ実行されます (「ロック画面でのタイルの表示」をご覧ください)。ロック画面への追加が必要ないバックグラウンド タスクも、トリガーに関連付けることができます。このようなバックグラウンド タスクのトリガーについては、「バックグラウンド タスクによるアプリのサポート」をご覧ください。