このページは役に立ちましたか。
このページのコンテンツについての ご意見をお待ちしております
その他にご意見はありますか。
残り 1500 文字
MSDN ライブラリ
情報
要求されたトピックは次のとおりです。しかし、このトピックはこのライブラリには含まれていません。

Windows Phone 8 のバックグラウンド エージェントの推奨事項

2014/06/18

対象: Windows Phone 8 および Windows Phone Silverlight 8.1 | Windows Phone OS 7.1

このトピックには、Windows Phone のバックグラウンド エージェントを開発する際の重要な考慮事項とベスト プラクティスが記載されています。

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

バックグラウンド エージェントをデバッグする場合は、次のことを考慮する必要があります。

  • デバッグ時にバックグラウンド エージェントを起動するには、LaunchForTest(String, TimeSpan) を使用します。デバッガーがアタッチされているときは、システムによって定期的なエージェントが起動されることはありません。このメソッドはフォアグラウンド アプリまたはバックグラウンド エージェントから呼び出すことができます。

  • Windows Phone OS 7.1 アプリでは、デバッガーがアタッチされている間は、メモリおよび実行時間のポリシーは適用されません。デバッグを実行していない状況でエージェントをテストし、エージェントがメモリ上限を超えたり、エージェントの種類に対して割り当てられている時間を超えて実行されないことを確認することが重要です。Windows Phone 8 アプリでは、デバッグ中にメモリおよび実行時間のポリシーが適用されます。

  • ApplicationMemoryUsageLimit を使用して、フォアグラウンド アプリおよびバックグラウンド エージェントの両方のメモリ制限を照会します。

Windows Phone OS 7.1 では、ユーザーが電話の [アプリの設定] で、インストールされている各アプリのバックグラウンド エージェントを無効にすることができます。アプリでエージェントが無効にされている場合、ScheduledActionServiceAdd(ScheduledAction) メソッドを使用してエージェントを登録しようとすると InvalidOperationException がスローされます。したがって、Add の呼び出しは try ブロックに配置します。例外がスローされ、例外に関連付けられているメッセージが "BNS Error: The action is disabled" の場合、エージェントはアプリに対して無効になっています。このケースを処理するための適切な方法を次のコードに示します。

bool agentsAreEnabled = true;
PeriodicTask periodicTask = new PeriodicTask("MyPeriodicTask");
periodicTask.Description = "This demonstrates a periodic task.";

// Place the call to Add in a try block in case the user has disabled agents.
try
{
  ScheduledActionService.Add(periodicTask);
}
catch (InvalidOperationException exception)
{
  if (exception.Message.Contains("BNS Error: The action is disabled"))
  {
    MessageBox.Show("Background agents for this application have been disabled by the user.");
    agentsAreEnabled = false;
  }
  if (exception.Message.Contains("BNS Error: The maximum number of ScheduledActions of this type have already been added."))
  {
    // No user action required. The system prompts the user when the hard limit of periodic tasks has been reached.
  }
}
catch (SchedulerServiceException)
{
  // No user action required.
}

}

また、定期的なバックアップ エージェントの数がデバイスの制限に達すると、InvalidOperationException がスローされます。許可されるエージェントの数は、デバイスのハードウェア機能によって異なりますが、この数は小さいのでこの制限に達することは珍しくありません。このような理由から、定期的なタスクを追加するときは必ずこの例外をキャッチすることが非常に重要です。たとえば、デバイスを起動したばかりでスケジュールされたアクション サービスがまだ開始されていない場合などには、タスクを追加するときに SchedulerServiceException がスローされる可能性があります。スケジュールされたタスクを追加するときは必ずこの例外をキャッチする必要があります。

ヒントヒント:

アプリの定期的なバックグラウンド エージェントが実行されていると、少量とはいえデバイスのバッテリー電力が消費されます。ユーザーは、バッテリー残量を長持ちさせるために [アプリの設定] で 1 つ以上のアプリのバックグラウンド エージェントを無効にすることができます。ただし、ユーザーが機能とバッテリー残量のバランスを簡単に取ることができるようにするため、ユーザーがバックグラウンド エージェントの有効化を選択できる機能をフォアグラウンド アプリに追加することができます。

フォアグラウンド アプリとバックグラウンド エージェントの間の情報の受け渡しは、エージェントとアプリが同時に実行されるかどうかを予測できないため、困難な場合があります。このための推奨のパターンを次に示します。

  1. 定期的なエージェントおよびリソースを大量に使用するエージェントの場合: LINQ 2 SQL、または Mutex で保護されている分離ストレージのファイルを使用します。フォアグラウンド アプリが書き込みを行い、エージェントが読み取りのみを行う 1 方向の通信では、Mutex で分離ストレージ ファイルを使用することをお勧めします。プロセス間の通信に IsolatedStorageSettings を使用しないことをお勧めします。データが破損する可能性があるからです。

  2. オーディオ エージェントの場合: AudioTrack クラスの Tag プロパティにカスタム データを格納します。オーディオ エージェントからフォアグラウンド アプリへの通知では、Tag プロパティを PlayStateChanged イベント ハンドラーで読み取ります。フォアグラウンド アプリからオーディオ エージェントにデータを渡すには、現在のトラックの Tag プロパティを OnPlayStateChanged(BackgroundAudioPlayer, AudioTrack, PlayState) メソッドの実装で読み取ります。

Windows Phone SDK 7.1 には、[Windows Phone のスケジュールされたタスク エージェント] と呼ばれるバックグラウンド エージェント用のプロジェクト テンプレートが用意されています。バックグラウンド エージェントを実装するときは、このテンプレートを使用してソリューションにプロジェクトを追加します。フォアグラウンド アプリのプロジェクトで、[プロジェクト] > [参照の追加] を選択し、バックグラウンド エージェント プロジェクトを選択して、バックグラウンド エージェント プロジェクトの出力への参照を追加します。既存のアプリのプロジェクト内で ScheduledTaskAgent を実装するクラスを作成しないでください。バックグラウンド エージェントがフォアグラウンド アプリと同じアセンブリ内にある場合、バックグラウンド エージェントは実行されません。

バックグラウンド エージェントのクラスまたは名前空間を名前変更する場合は、フォアグラウンド アプリのアプリ マニフェスト ファイルを手動で更新する必要があります。このファイルの構造の詳細については、Windows Phone 8 用のアプリ マニフェスト ファイルの「TASKS 要素」セクションを参照してください。

バックグラウンド エージェントのメモリ制限により、アプリが背景イメージとして使用するイメージを動的に生成する場合は、WVGA 解像度をターゲットとし、それよりも解像度が高い画面については電話がイメージを自動的に拡大できるようにすることを推奨します。WVGA よりも解像度が高いイメージを生成すると、エージェントがメモリの上限を超える可能性があります。

表示:
© 2015 Microsoft