在應用程式資訊清單中宣告背景工作

重要 API

在應用程式資訊清單中,透過宣告背景工作為延伸的方式,啟用它們的使用。

重要

本文專屬於跨程序背景工作。 程序背景工作不會在指令清單中宣告。

程序外背景工作必須在應用程式清單中聲明,否則您的應用程式將無法註冊它們 (將引發異常)。 此外,必須在應用程式指令清單中宣告跨程序背景工作,才能通過認證。

本主題假設您已建立一或多個背景工作類別,而且您的應用程式會註冊每個背景工作來執行,以回應至少一個觸發程序。

手動新增延伸模組

開啟應用程式清單 (Package.appxmanifest) 並前往應用程式元素。 建立一個 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. 變更工作類型屬性清單以指示用於此背景工作的工作註冊類型。 如果背景工作註冊了多種觸發程序類型,請為每個觸發程序新增額外的工作元素和類型屬性。

    注意確保列出您正在使用的每個觸發程序類型,否則背景工作將不會註冊未宣告的觸發程序類型 (Register 方法將失敗並引發異常)。

    此代碼段範例指出系統事件觸發程序和推播通知的使用:

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

新增多個背景工作延伸模組

針對您的應用程式所註冊的每個其他背景工作類別重複步驟 2。

下列範例是背景工作範例中的完整 Application 元素。 這會顯示 2 個背景工作類別的用法,總共有 3 個觸發程序類型。 複製此範例的 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 屬性執行的位置。

以下範例 XML 會宣告在BackgroundTaskHost.exe 程序中執行的背景工作,但與相同應用程式的背景工作執行個體不同。 請注意 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>

注意

您無法指定 ResourceGroupServerName 與搭配 SupportsMultipleInstances 使用。