在背景無限期執行
為了為使用者提供最佳體驗,Windows 會對通用 Windows 平台 (UWP) 應用程式施加資源限制。 前景應用程式會獲得最多記憶體和執行時間;背景應用程式獲得較少。 因此,使用者會受到保護,使其免受前景應用程式效能不佳和電池耗盡的影響。
不過,撰寫 UWP 應用程式以供個人使用的開發人員 (也就是不會在 Microsoft Store 中發佈側載的應用程式),或撰寫企業 UWP 應用程式的開發人員,可能會想要使用裝置上可用的所有資源,而不需要任何背景或延長執行節流。 企業營運和個人 UWP 應用程式可以使用 Windows Creators Update (版本 1703) 中的 API 來關閉節流。 請注意,如果應用程式使用這些 API,就無法將應用程式放入 Microsoft Store。
最小化時執行
UWP 應用程式在前景未執行時,會移至暫停狀態。 在桌面上,當使用者將應用程式最小化時,就會發生這種情況。 應用程式會使用延長執行工作階段,以便在最小化時繼續執行。 Microsoft Store 接受的延長執行 API 的詳細資訊,請參閱「透過延長執行延後應用程式暫停」。
如果您要開發不打算提交至 Microsoft Store 的應用程式,則可以使用 ExtendedExecutionForegroundSession 搭配 extendedExecutionUnconstrained
受限制的功能,讓應用程式可以在最小化時繼續執行,而不論裝置的能源狀態為何。
extendedExecutionUnconstrained
功能會在您應用程式的資訊清單中新增為受限制的功能。 如需受限功能的詳細資訊,請參閱應用程式功能宣告。
「Package.appxmanifest」
<Package
...
xmlns:rescap="http://schemas.microsoft.com/appx/manifest/foundation/windows10/restrictedcapabilities"
IgnorableNamespaces="uap mp rescap">
...
<Capabilities>
<rescap:Capability Name="extendedExecutionUnconstrained"/>
</Capabilities>
</Package>
當您使用 extendedExecutionUnconstrained
功能時,將使用 ExtendedExecutionForegroundSession 和 ExtendedExecutionForegroundReason,而不是 ExtendedExecutionSession 和 ExtendedExecutionReason。 建立工作階段、設定成員和要求延伸模組的相同模式仍適用:
var newSession = new ExtendedExecutionForegroundSession();
newSession.Reason = ExtendedExecutionForegroundReason.Unconstrained;
newSession.Description = "Long Running Processing";
newSession.Revoked += SessionRevoked;
ExtendedExecutionForegroundResult result = await newSession.RequestExtensionAsync();
switch (result)
{
case ExtendedExecutionForegroundResult.Allowed:
DoLongRunningWork();
break;
default:
case ExtendedExecutionForegroundResult.Denied:
DoShortRunningWork();
break;
}
只要應用程式進入前景,您就可以要求延長執行工作階段。 不受限制的延長執行工作階段不會受限於能源配額或作業系統省電模式。 只要工作階段物件的參考存在,應用程式就會保持在執行中狀態,而不會進入暫停狀態。 如果使用者關閉應用程式,則會撤銷工作階段。
註冊 Revoked 事件可讓應用程式執行所需的任何清除工作。 在暫停狀態中,您可以使用 ExtendedExecutionReason.SavingData 建立延長執行工作階段,以在應用程式終止並從記憶體中移除之前儲存使用者資料。
無限期執行背景工作
在通用 Windows 平台中,背景工作是在背景中執行且沒有任何形式使用者介面的程序。 背景工作通常會在取消之前最多執行 25 秒。 有些較長時間執行的工作也會執行檢查,以確保背景工作不會閒置或使用記憶體。 在 Windows Creators Update (版本 1703) 中,引進 extendedBackgroundTaskTime 受限制的功能來移除這些限制。 extendedBackgroundTaskTime 功能會新增為應用程式資訊清單檔案中的受限制功能:
「Package.appxmanifest」
<Package
...
xmlns:rescap="http://schemas.microsoft.com/appx/manifest/foundation/windows10/restrictedcapabilities"
IgnorableNamespaces="uap mp rescap">
...
<Capabilities>
<rescap:Capability Name="extendedBackgroundTaskTime"/>
</Capabilities>
</Package>
此功能會移除執行時間限制和閒置工作監督程式。 一旦背景工作啟動,無論是由觸發程序或應用程式服務呼叫,只要在 Run 方法所提供的 BackgroundTaskInstance 上延遲,就可以無限期執行。 如果應用程式設定為 [由 Windows 管理],則仍可能對應用程式設定能源使用限額,並且當電池節約模式啟用時,不會啟動背景工作。 這可以透過作業系統設定進行變更。 如需詳細資訊,請參閱最佳化背景活動。
通用 Windows 平台會監視背景工作執行,以確保良好的電池使用時間和順暢的前景應用程式體驗。 不過,個人應用程式和企業營運應用程式可以使用延長執行和 extendedBackgroundTaskTime 功能來建立應用程式,無論裝置的資源可用性為何,都會視需要執行。
請注意, extendedExecutionUnconstrained 和 extendedBackgroundTaskTime 功能可以覆寫 UWP 應用程式的預設原則,而且可能會導致耗用大量電池電量。 使用這些功能之前,請先確認預設延長執行和背景工作時間原則不符合您的需求,並在電池限制條件下執行測試,以瞭解您的應用程式對裝置的影響。