アプリケーション マニフェストでのバックグラウンド タスクの宣言

重要な API

アプリ マニフェストでバックグラウンド タスクを拡張機能として宣言し、バックグラウンド タスクを使うことができるようにします。

重要

この記事は、プロセス外のバックグラウンド タスクに固有です。 インプロセス バックグラウンド タスクはマニフェストで宣言されていません。

プロセス外のバックグラウンド タスクは、アプリ マニフェストで宣言する必要があります。そうしないと、アプリで登録できなくなります (例外がスローされます)。 さらに、認定に合格するには、プロセス外のバックグラウンド タスクをアプリケーション マニフェストで宣言する必要があります。

このトピックでは、1 つ以上のバックグラウンド タスク クラスが作成されていること、およびアプリが少なくとも 1 つのトリガーに応答して実行する各バックグラウンド タスクを登録していることを前提としています。

拡張機能を手動で追加する

アプリケーション マニフェスト (Package.appxmanifest) を開き、Application 要素に移動します。 Extensions 要素を作成します (まだ存在しない場合)。

次のスニペットは、 バックグラウンド タスクのサンプルから取得します

<Application Id="App"
   ...
   <Extensions>
     <Extension Category="windows.backgroundTasks" EntryPoint="Tasks.SampleBackgroundTask">
       <BackgroundTasks>
         <Task Type="systemEvent" />
         <Task Type="timer" />
       </BackgroundTasks>
     </Extension>
     <Extension Category="windows.backgroundTasks" EntryPoint="Tasks.ServicingComplete">
       <BackgroundTasks>
         <Task Type="systemEvent"/>
       </BackgroundTasks>
     </Extension>
   </Extensions>
 </Application>

バックグラウンド タスク拡張機能を追加する

最初のバックグラウンド タスクを宣言します。

このコードを Extensions 要素にコピーします (次の手順で属性を追加します)。

<Extensions>
    <Extension Category="windows.backgroundTasks" EntryPoint="">
      <BackgroundTasks>
        <Task Type="" />
      </BackgroundTasks>
    </Extension>
</Extensions>
  1. EntryPoint 属性を変更して、バックグラウンド タスク (namespace.classname) を登録するときに、コードでエントリ ポイントと同じ文字列を使用するようにします。

    この例では、エントリ ポイントは ExampleBackgroundTaskNameSpace.ExampleBackgroundTaskClassName です。

<Extensions>
    <Extension Category="windows.backgroundTasks" EntryPoint="Tasks.ExampleBackgroundTaskClassName">
       <BackgroundTasks>
         <Task Type="" />
       </BackgroundTasks>
    </Extension>
</Extensions>
  1. Task Type 属性の一覧を変更して、このバックグラウンド タスクで使用されるタスク登録の種類を示します。 バックグラウンド タスクが複数のトリガーの種類に登録されている場合は、それぞれに Task 要素と Type 属性を追加します。

    使っているトリガーの各種類を確実に列記してください。そうしないと、バックグラウンド タスクは宣言されていない種類のトリガーには登録されません (Register メソッドが失敗し、例外がスローされます)。

    このスニペットの例は、システム イベント トリガーとプッシュ通知の使用を示しています。

<Extension Category="windows.backgroundTasks" EntryPoint="Tasks.BackgroundTaskClass">
    <BackgroundTasks>
        <Task Type="systemEvent" />
        <Task Type="pushNotification" />
    </BackgroundTasks>
</Extension>

複数のバックグラウンド タスク拡張機能を追加する

アプリによって登録された追加のバックグラウンド タスク クラスごとに、手順 2 を繰り返します。

次の例は、 background タスク サンプルの完全な Application 要素です。 これは、合計 3 種類のトリガーを持つ 2 つのバックグラウンド タスク クラスの使用を示しています。 この例の Extensions セクションをコピーし、必要に応じて変更して、アプリケーション マニフェストでバックグラウンド タスクを宣言します。

<Applications>
    <Application Id="App"
      Executable="$targetnametoken$.exe"
      EntryPoint="BackgroundTask.App">
        <uap:VisualElements
          DisplayName="BackgroundTask"
          Square150x150Logo="Assets\StoreLogo-sdk.png"
          Square44x44Logo="Assets\SmallTile-sdk.png"
          Description="BackgroundTask"

          BackgroundColor="#00b2f0">
          <uap:LockScreen Notification="badgeAndTileText" BadgeLogo="Assets\smalltile-Windows-sdk.png" />
            <uap:SplashScreen Image="Assets\Splash-sdk.png" />
            <uap:DefaultTile DefaultSize="square150x150Logo" Wide310x150Logo="Assets\tile-sdk.png" >
                <uap:ShowNameOnTiles>
                    <uap:ShowOn Tile="square150x150Logo" />
                    <uap:ShowOn Tile="wide310x150Logo" />
                </uap:ShowNameOnTiles>
            </uap:DefaultTile>
        </uap:VisualElements>

      <Extensions>
        <Extension Category="windows.backgroundTasks" EntryPoint="Tasks.SampleBackgroundTask">
          <BackgroundTasks>
            <Task Type="systemEvent" />
            <Task Type="timer" />
          </BackgroundTasks>
        </Extension>
        <Extension Category="windows.backgroundTasks" EntryPoint="Tasks.ServicingComplete">
          <BackgroundTasks>
            <Task Type="systemEvent"/>
          </BackgroundTasks>
        </Extension>
      </Extensions>
    </Application>
</Applications>

バックグラウンド タスクを実行する場所を宣言する

バックグラウンド タスクの実行場所を指定できます。

  • 既定では、BackgroundTaskHost.exe プロセスで実行されます。
  • フォアグラウンド アプリケーションと同じプロセスで。
  • ResourceGroupを使用して、複数のバックグラウンド タスクを同じホスティング プロセスに配置するか、別のプロセスに分割します。
  • SupportsMultipleInstancesを使用して、新しいトリガーが発生するたびに独自のリソース制限 (メモリ、cpu) を取得する新しいプロセスでバックグラウンド プロセスを実行します。

フォアグラウンド アプリケーションと同じプロセスで実行する

フォアグラウンド アプリケーションと同じプロセスで実行されるバックグラウンド タスクを宣言する XML の例を次に示します。

<Extensions>
    <Extension Category="windows.backgroundTasks" EntryPoint="ExecModelTestBackgroundTasks.ApplicationTriggerTask">
        <BackgroundTasks>
            <Task Type="systemEvent" />
        </BackgroundTasks>
    </Extension>
</Extensions>

EntryPoint を指定すると、トリガーの起動時に、アプリケーションは指定したメソッドへのコールバックを受け取ります。 EntryPoint を指定していない場合、アプリケーションは OnBackgroundActivated() を介してコールバックを受け取ります。 詳細については、 プロセス内のバックグラウンド タスクの作成と登録 を参照してください。

ResourceGroup 属性を使用して、バックグラウンド タスクの実行場所を指定します。

次に示すのは、BackgroundTaskHost.exe プロセスで実行されるバックグラウンド タスクを宣言する XML の例ですが、同じアプリのバックグラウンド タスクの他のインスタンスとは別のインスタンスで実行されます。 ResourceGroup属性に注意してください。これは、一緒に実行するバックグラウンド タスクを識別します。

<Extensions>
    <Extension Category="windows.backgroundTasks" EntryPoint="BackgroundTasks.SessionConnectedTriggerTask" ResourceGroup="foo">
      <BackgroundTasks>
        <Task Type="systemEvent" />
      </BackgroundTasks>
    </Extension>
    <Extension Category="windows.backgroundTasks" EntryPoint="BackgroundTasks.TimeZoneTriggerTask" ResourceGroup="foo">
      <BackgroundTasks>
        <Task Type="systemEvent" />
      </BackgroundTasks>
    </Extension>
    <Extension Category="windows.backgroundTasks" EntryPoint="BackgroundTasks.TimerTriggerTask" ResourceGroup="bar">
      <BackgroundTasks>
        <Task Type="timer" />
      </BackgroundTasks>
    </Extension>
    <Extension Category="windows.backgroundTasks" EntryPoint="BackgroundTasks.ApplicationTriggerTask" ResourceGroup="bar">
      <BackgroundTasks>
        <Task Type="general" />
      </BackgroundTasks>
    </Extension>
    <Extension Category="windows.backgroundTasks" EntryPoint="BackgroundTasks.MaintenanceTriggerTask" ResourceGroup="foobar">
      <BackgroundTasks>
        <Task Type="general" />
      </BackgroundTasks>
    </Extension>
</Extensions>

SupportsMultipleInstances 属性を使用してトリガーが起動するたびに、新しいプロセスで実行する

この例では、新しいトリガーが発生するたびに独自のリソース制限 (メモリと CPU) を取得する新しいプロセスで実行されるバックグラウンド タスクを宣言します。 この動作を有効にする SupportsMultipleInstances の使用に注意してください。 この属性を使用するには、SDK バージョン '10.0.15063' (Windows 10 Creators Update) 以降をターゲットにする必要があります。

<Package
    xmlns:uap4="http://schemas.microsoft.com/appx/manifest/uap/windows10/4"
    ...
    <Applications>
        <Application ...>
            ...
            <Extensions>
                <Extension Category="windows.backgroundTasks" EntryPoint="BackgroundTasks.TimerTriggerTask">
                    <BackgroundTasks uap4:SupportsMultipleInstances="true">
                        <Task Type="timer" />
                    </BackgroundTasks>
                </Extension>
            </Extensions>
        </Application>
    </Applications>

Note

SupportsMultipleInstancesと組み合わせてResourceGroupまたはServerNameを指定することはできません。