Windows Phone のバックグラウンド エージェント

2013/12/05

対象: Windows Phone 8 | Windows Phone OS 7.1

スケジュールされたタスクとバックグラウンド エージェントを使用すると、アプリケーションがフォアグラウンドで実行されていないときも、アプリケーションはバックグラウンドでコードを実行できます。さまざまなバックグラウンド処理のシナリオに合わせて、異なる種類のスケジュールされたタスクが設計されており、それぞれの動作と制約は異なります。このトピックでは、スケジュールされたタスクのスケジュール、継続時間、および制限について説明します。

このトピックは、次のセクションで構成されています。

スケジュールされたタスクの種類を次に示します。ScheduledTaskScheduledAction から派生します。バックグラウンドで実行されるコードは、ScheduledTaskAgent (BackgroundAgent から派生) から派生するクラスに配置されます。

スケジュールされたタスクの種類

説明

PeriodicTask

定期的なエージェントは、短い時間にわたって、定期的な間隔で繰り返し実行されます。この種類のタスクの典型的なシナリオとして、デバイスの位置のアップロードや、少量データの同期の実行などが考えられます。

ResourceIntensiveTask

リソースを大量に消費するエージェントは、プロセッサの動作状況、電源、およびネットワーク接続に関連する一連の要件を電話が満たす場合に、比較的長い時間実行されます。この種類のタスクの典型的なシナリオとして、ユーザーがアクティブに電話を使用していない間に、大量のデータを電話に同期することが考えられます。

アプリケーションが維持できるバックグラウンド エージェントは 1 つだけです。このエージェントは、PeriodicTaskResourceIntensiveTask、またはその両方として登録できます。エージェントの実行スケジュールは、そのエージェントが登録されているタスクの種類によって異なります。スケジュールの詳細は、このトピックで後ほど説明します。一度に実行できるのは、エージェントの 1 つのインスタンスのみです。

エージェントのコードは、BackgroundAgent から継承するクラスの中で、アプリケーションによって実装されます。エージェントが起動されると、オペレーティング システムは OnInvoke(ScheduledTask) を呼び出します。このメソッドの中で、アプリケーションは実行されている ScheduledTask の種類を判断し、適切な処理を実行できます。エージェントは、タスクを完了した時点で NotifyComplete() または Abort() を呼び出し、完了についてオペレーティング システムに知らせる必要があります。タスクが成功した場合は、NotifyComplete を使用する必要があります。エージェントは、タスクを実行できない場合 (必要なサーバーが利用できないなど)、Abort を呼び出し、IsScheduled プロパティを false に設定する必要があります。フォアグラウンド アプリケーションは実行時にこのプロパティを確認し、Abort が呼び出されたかどうかを判断できます。

すべてのスケジュールされたタスクには、次の制約が適用されます。

制約

説明

サポートされていない API

スケジュールされたタスクが使用できない一連の API があります。これらの API を使用すると、実行時に例外がスローされるか、Store への送信時にアプリケーションが認証に失敗します。制限されている API の一覧については、「Windows Phone のバックグラウンド エージェントの非サポート API」を参照してください。

メモリ使用量の上限

定期的なエージェントとリソースを大量に消費するエージェントは、1 GB 以上のメモリがあるデバイスでは、どの時点においても 20 MB を超えるメモリを使用することはできません。低メモリ デバイス では、制限は 11 MB です。オーディオ エージェントには、以下のようなメモリ上限があります。スケジュールされたタスクがこのメモリ上限を超えると、タスクは即時に終了されます。

どちらの種類のバックグラウンド オーディオ エージェントも同じプロセスでホストされ、以下の最大メモリ制限を共有します。

  1. のある Windows Phone 8 では 25 MB (つまり、8.0.10492 以降のバージョンの場合)。

  2. のない Windows Phone 8 では 20 MB (つまり、8.0.10492 未満のバージョンの場合)。

  3. Windows Phone OS 7.1 では 15 MB。

デバッガーでの実行時には、メモリとタイムアウトの制限は停止されます。ApplicationMemoryUsageLimit API を使用して、フォアグラウンド アプリケーションとバックグラウンド エージェントの両方のメモリ制限を照会できます。

2 週間ごとに再スケジュールが必要

ScheduledTask オブジェクトの ExpirationTime プロパティを使用すると、タスクが実行されなくなるまでの時間を設定できます。Add(ScheduledAction) メソッドを使用してアクションをスケジュールするときは、この値を 2 週間以内の期間に設定する必要があります。タスクに関連付けられているアプリケーションがフォアグラウンドで実行される場合、そのタスクが再スケジュールされ、有効期限が現在の時刻から最大 2 週間後に再設定されることがあります。

アプリのバックグラウンド エージェントが期限切れにならない、または自動的に更新される数少ないケースが存在します。

  • アプリに対応するタイルが電話の開始画面に固定され、バックグラウンド エージェントが Update(ShellTileData) を呼び出してタイルを更新する場合は、バックグラウンド エージェントのスケジュールに対応する有効期限は自動的に 2 週間延長されます。詳細については、「Windows Phone のタイル」を参照してください。

  • ユーザーがアプリを選択し、ロック画面に通知が表示され、バックグラウンド エージェントが Update(ShellTileData) を呼び出してロック画面を更新する場合は、バックグラウンド エージェントのスケジュールに対応する有効期限は自動的に 2 週間延長されます。詳細については、「Windows Phone 8 のロック画面の通知」を参照してください。

  • アプリが、リソースを大量に消費するエージェントを使用して写真を自動アップロードする場合は、ユーザーが [Photos+Camera] 設定ページでアプリに対してこの機能を有効にしている限り、リソースを大量に消費するエージェントのスケジュールは期限切れになりません。詳細については、「Windows Phone 8 の自動アップロード アプリ」を参照してください。

2 回連続クラッシュの後はエージェントのスケジュールが解除される

メモリ クォータを超えるか、その他の処理できない例外が発生したことが原因で 2 回連続して終了すると、定期的なエージェントおよびリソースを大量に消費するエージェントの両方のスケジュールが解除されます。フォアグラウンド アプリケーションでエージェントを再スケジュールする必要があります。

定期的なエージェントのスケジュール、継続時間、および一般的な制約を次に示します。

制約

説明

時間間隔: 30 分

通常、定期的なエージェントは、30 分ごとに実行されます。バッテリーの残量を最適化するため、定期的なエージェントは他のバックグラウンド プロセスに合わせて実行されることがあるので、実行時刻は最大 10 分ずれる可能性があります。

スケジュールされた継続時間: 25 秒

通常、定期的なエージェントは、25 秒にわたって実行されます。エージェントが途中で終了する原因となる制約は他にもあります。

バッテリー セーバー モードでは実行できないことがある

バッテリー セーバー モードは、ユーザーがデバイスで有効にして、バッテリー残量を優先するように指定できるオプションです。このモードが有効になっている場合、定期的なエージェントは間隔が経過しても実行されないことがあります。

デバイスごとの定期的なエージェントの制限

デバイスのバッテリー残量を最大化するため、電話でスケジュールできる定期的なエージェントの数にはハード制限があります。この数はデバイスの構成ごとに異なり、最小は 6 です。ハード制限よりも少ない別の制限があり、この制限に達すると、複数のバックグラウンド エージェントが実行されていることが原因でバッテリーの消費が早くなる可能性について、ユーザーに警告が表示されます。

注意注意:
デバイスの制限を超えているときに定期的なバックグラウンド エージェントを追加しようとした場合、Add(ScheduledAction) を呼び出したときに InvalidOperationException がスローされます。デバイスごとの定期的なエージェントの制限は少ないので、アプリケーションでこの例外が発生する可能性が高くなります。この理由から、アプリケーションがクラッシュしないようにするために、定期的なエージェントを追加するときにこの例外をキャッチすることが非常に重要です。このためのコードの例については、「Windows Phone のバックグラウンド エージェントの推奨事項」を参照してください。

リソースを大量に消費するエージェントのスケジュール、継続時間、および一般的な制約を次に示します。

制約

説明

継続時間: 10 分

通常、リソースを大量に消費するエージェントは 10 分間にわたって実行されます。エージェントが途中で終了する原因となる制約は他にもあります。

外部電源が必要

リソースを大量に消費するエージェントは、デバイスが外部電源に接続されていない限り実行されません。

携帯ネットワーク以外の接続が必要

デバイスで Wi-Fi 経由のネットワーク接続または PC への接続が行われていない限り、リソースを大量に消費するエージェントは実行されません。

バッテリーの最小電力

リソースを大量に消費するエージェントは、デバイスのバッテリー電力が 90% を上回っていないと実行されません。

デバイス画面のロックが必要

リソースを大量に消費するエージェントは、デバイス画面がロックされていないと実行されません。

アクティブな通話がない

リソースを大量に消費するエージェントは、通話がアクティブな場合は実行されません。

ネットワークを携帯ネットワークに変更できない

リソースを大量に消費するエージェントが AssociateToNetworkInterface(Socket, NetworkInterfaceInfo) の呼び出しを試み、MobileBroadbandGSM() または MobileBroadbandCDMA() を指定すると、メソッドの呼び出しは失敗します。

必要な条件がすべて満たされた状態となり、リソースを大量に消費するエージェントが起動された後で、デバイスの状態が変化していずれかの条件が満たされなくなると、リソースを大量に消費するエージェントはすぐに終了されます。

注意注意:

リソースを大量に消費するエージェントが実行されるために満たす必要がある、デバイスでの制約が原因で、エージェントが特定のデバイスでまったく実行されない可能性があります。たとえば、ユーザーが Wi-Fi または PC にアクセスできない場合、携帯ネットワーク以外への接続を行うことはできず、リソースを大量に消費するエージェントはデバイス上で実行されません。また、リソースを大量に消費するエージェントは一度に 1 つのみ実行されるため、リソースを大量に消費するエージェントを使用するアプリケーションがそれより多くデバイスにインストールされている場合、エージェントが実行される可能性はさらに低くなります。アプリケーションを設計するときは、このことを考慮する必要があります。

表示:
© 2014 Microsoft