在應用程式資訊清單中宣告背景工作
重要 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>
變更 EntryPoint 屬性,使程式代碼在註冊背景工作 (namespace.classname) 時所使用的字串與進入點相同。
在此範例中,入口點是ExampleBackgroundTaskNameSpace.ExampleBackgroundTaskClassName:
<Extensions>
<Extension Category="windows.backgroundTasks" EntryPoint="Tasks.ExampleBackgroundTaskClassName">
<BackgroundTasks>
<Task Type="" />
</BackgroundTasks>
</Extension>
</Extensions>
變更工作類型屬性清單以指示用於此背景工作的工作註冊類型。 如果背景工作註冊了多種觸發程序類型,請為每個觸發程序新增額外的工作元素和類型屬性。
注意確保列出您正在使用的每個觸發程序類型,否則背景工作將不會註冊未宣告的觸發程序類型 (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>
注意
您無法指定 ResourceGroup
或 ServerName
與搭配 SupportsMultipleInstances
使用。