言語: HTML | XAML

バックグラウンド タスクを登録する方法 (XAML)

ほとんどのバックグラウンド タスクを安全に登録できる再利用可能な関数の作成方法について説明します。 このトピックは、バックグラウンド タスクを登録するユーティリティ関数の作り方を順に説明します。このユーティリティ関数は、二重登録による問題を防ぐために、同じタスクが登録されていないかどうかをチェックしたうえでタスクを登録します。バックグラウンド タスクにシステムの条件を適用することができます。ここで紹介しているユーティリティ関数は、それ自体で完結した実用的なコード例となっています。

  

Windows Phone ストア アプリでは、バックグラウンド タスクの登録を試みる前に RequestAccessAsync を呼び出す必要があります。Windows では、実行するにはアプリをロック画面に配置する必要があるバックグラウンド タスク セットにのみこの呼び出しが必要ですが、Phone ではどのバックグラウンド タスクを登録する場合でも、その前に一度このメソッドを呼び出す必要があります。

更新プログラムのリリース後に Windows Phone ストア アプリが引き続き適切に実行されるようにするには、更新された後にアプリを起動するときに RemoveAccessRequestAccessAsync の順に呼び出す必要があります。詳しくは、「バックグラウンド タスクのガイドライン (Windows ランタイム アプリ)」をご覧ください。

理解しておく必要があること

テクノロジ

必要条件

  • このトピックでは、登録するバックグラウンド タスクが既にあることを前提としています。バックグラウンド タスクの作成方法については、このトピックでは取り上げません。

手順

ステップ 1: メソッドのシグニチャと戻り値の型の定義

このメソッドは、タスクのエントリ ポイント、タスク名、構築済みのバックグラウンド タスク トリガーのほか、(必要に応じて) バックグラウンド タスクの SystemCondition を引数として受け取ります。このメソッドは、BackgroundTaskRegistration オブジェクトを返します。


public static BackgroundTaskRegistration RegisterBackgroundTask(
                                                string taskEntryPoint, 
                                                string name,
                                                IBackgroundTrigger trigger,
                                                IBackgroundCondition condition)
{
    
    // We’ll add code to this function in subsequent steps.

}

ステップ 2: 登録の重複確認

既に登録されたタスクかどうかを確認します。同じタスクが二重に登録されると、1 回のトリガーにつきタスクが複数回実行され、CPU クォータが無駄に消費されるばかりか、予期しない動作を招くこともあるため、この確認は重要です。

同じタスクが登録されているかどうかは、BackgroundTaskRegistration.AllTasks プロパティを照会し、返された結果を反復処理することで確認できます。各インスタンスの名前を調べ、登録しようとしているタスクの名前と一致した場合、ループを抜けて、フラグ変数を設定します。このフラグに応じたコード パスが次のステップで選択されます。

  バックグラウンド タスクには、アプリ内で重複しない名前を使ってください。各バックグラウンド タスクには一意の名前が付いている必要があります。

次のコードは、最後の手順で作成した SystemTrigger を使ってバックグラウンド タスクを登録します。


public static BackgroundTaskRegistration RegisterBackgroundTask(
                                                string taskEntryPoint, 
                                                string name,
                                                IBackgroundTrigger trigger,
                                                IBackgroundCondition condition)
{
    //
    // Check for existing registrations of this background task.
    //

    foreach (var cur in BackgroundTaskRegistration.AllTasks)
    {

        if (cur.Value.Name == name)
        {
            // 
            // The task is already registered.
            // 

            return (BackgroundTaskRegistration)(cur.Value);
        }
    }


    // We’ll register the task in the next step.

}

ステップ 3: バックグラウンド タスクを登録する (または既に登録されているタスクを返す)

同じバックグラウンド タスクが既に登録されているかどうかを確認します。登録されている場合は、そのタスクのインスタンスを返します。

登録されていない場合は、新しい BackgroundTaskBuilder オブジェクトを使ってタスクを登録します。このコードは、condition パラメーターが null かどうかを確認し、null でない場合は、その condition を登録オブジェクトに追加します。戻り値は、BackgroundTaskBuilder.Register メソッドから返された BackgroundTaskRegistration です。

  

Windows 8.1 以降では、バックグラウンド タスクの登録パラメーターが登録時に検証されます。いずれかの登録パラメーターが有効でない場合は、エラーが返されます。アプリは、バックグラウンド タスクの登録が失敗するシナリオを処理できる必要があります。たとえば、条件ステートメントを使って登録エラーを確認し、失敗した登録は別のパラメーター値を使ってやり直してみます。

次の例には、既にあるタスクを返すか、バックグラウンド タスクを登録するコードが追加されています。また、システムの条件 (省略可能) が指定された場合の処理も追加されています。


public static BackgroundTaskRegistration RegisterBackgroundTask(
                                                string taskEntryPoint, 
                                                string name,
                                                IBackgroundTrigger trigger,
                                                IBackgroundCondition condition)
{
    //
    // Check for existing registrations of this background task.
    //

    foreach (var cur in BackgroundTaskRegistration.AllTasks)
    {

        if (cur.Value.Name == taskName)
        {
            // 
            // The task is already registered.
            // 

            return (BackgroundTaskRegistration)(cur.Value);
        }
    }


    //
    // Register the background task.
    //

    var builder = new BackgroundTaskBuilder();

    builder.Name = name;
    builder.TaskEntryPoint = taskEntryPoint;
    builder.SetTrigger(trigger);

    if (condition != null)
    {

        builder.AddCondition(condition);
    }

    BackgroundTaskRegistration task = builder.Register();

    return task;
}

バックグラウンド タスク登録ユーティリティ関数の完成

この例は、バックグラウンド タスク登録ユーティリティ関数全体を示しています。ネットワーク関連のバックグラウンド タスクを除くほとんどのバックグラウンド タスクは、この関数を使って登録できます。


//
// Register a background task with the specified taskEntryPoint, name, trigger,
// and condition (optional).
//
// taskEntryPoint: Task entry point for the background task.
// taskName: A name for the background task.
// trigger: The trigger for the background task.
// condition: Optional parameter. A conditional event that must be true for the task to fire.
//
public static BackgroundTaskRegistration RegisterBackgroundTask(string taskEntryPoint,
                                                                string taskName,
                                                                IBackgroundTrigger trigger,
                                                                IBackgroundCondition condition)
{
    //
    // Check for existing registrations of this background task.
    //

    foreach (var cur in BackgroundTaskRegistration.AllTasks)
    {

        if (cur.Value.Name == taskName)
        {
            // 
            // The task is already registered.
            // 

            return (BackgroundTaskRegistration)(cur.Value);
        }
    }


    //
    // Register the background task.
    //

    var builder = new BackgroundTaskBuilder();

    builder.Name = taskName;
    builder.TaskEntryPoint = taskEntryPoint;
    builder.SetTrigger(trigger);

    if (condition != null)
    {

        builder.AddCondition(condition);
    }

    BackgroundTaskRegistration task = builder.Register();

    return task;
}

関連トピック

クイック スタート: バックグラウンド タスクの作成と登録
バックグラウンド タスクでシステム イベントに応答する方法
バックグラウンド タスクを実行するための条件を設定する方法
メンテナンス トリガーの使用方法
取り消されたバックグラウンド タスクを処理する方法
バックグラウンド タスクの進捗状況と完了を監視する方法
タイマーでバックグラウンド タスクを実行する方法
How to debug a background task
Windows ストア アプリで一時停止イベント、再開イベント、バックグラウンド イベントをトリガーする方法 (デバッグ時)

 

 

表示:
© 2015 Microsoft