共用方式為


在背景中無限期地執行

為了為使用者提供最佳體驗,Windows 會對通用 Windows 平臺 (UWP) 應用程式施加資源限制。 前景應用程式會獲得最多的記憶體和運行時間;背景應用程式則分配較少。 這樣就能保護使用者避免前景應用程式效能不彰和電池電力嚴重流失。

不過,撰寫 UWP 應用程式以供個人使用的開發人員(也就是不會在 Microsoft 市集中發佈的側載應用程式),或撰寫企業 UWP 應用程式的開發人員,可能會想要使用裝置上可用的所有資源,而不需要任何背景或延伸執行限制。 企業營運和個人 UWP 應用程式可以使用 Windows Creators Update(版本 1703)中的 API 來停用節流限制。 請注意,如果應用程式使用這些 API,就無法將應用程式放入 Microsoft Store。

最小化時執行

UWP 應用程式在不在前景執行時,會移至暫停狀態。 在桌面上,當使用者將應用程式最小化時,就會發生這種情況。 應用程式使用延長執行階段,以便在被最小化時繼續運行。 Microsoft Store 接受的延伸執行 API 詳述於 延後應用程式暫停並延長執行

如果您要開發不打算提交至 Microsoft Store 的應用程式,則可以使用 ExtendedExecutionForegroundSession 搭配 extendedExecutionUnconstrained 受限制的功能,讓您的 app 可以在最小化時繼續執行,而不論裝置的能源狀態為何。  

此功能 extendedExecutionUnconstrained 會在您應用程式的指令清單中新增為受限制的功能。 如需受限制功能的詳細資訊,請參閱 應用程式功能宣告

備註

新增 xmlns:rescap XML 命名空間宣告,並使用 rescap 前置詞來宣告該能力。

如需詳細資訊,請參閱 應用程式功能宣告的受限制功能一節。

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 功能時,會使用 ExtendedExecutionForegroundSessionExtendedExecutionForegroundReason,而不是 ExtendedExecutionSessionExtendedExecutionReason。 建立工作階段、設置成員並且非同步地請求擴充功能的相同模式仍然適用:

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 建立具有 ExtendedExecutionReason.SavingData 的擴充執行會話,以在應用程式終止並從記憶體中移除之前儲存用戶數據。

無限期執行背景工作

在通用 Windows 平臺中,背景工作是在背景中執行且沒有任何形式的使用者介面的程式。 背景工作通常最長可以執行 25 秒,然後會被取消。 某些運行時間較長的任務也會進行檢查,以確保背景任務不會閒置或無謂地佔用記憶體。 在 Windows Creators Update(版本 1703)中,推出了 延長 BackgroundTaskTime 的限制性功能來移除這些限制。 extendedBackgroundTaskTime 功能會新增為 app 指令清單檔案中受限制的功能:

備註

新增 xmlns:rescap XML 命名空間宣告,並使用 rescap 前置詞來宣告該能力。

如需詳細資訊,請參閱 應用程式功能宣告的受限制功能一節。

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>

此功能會移除運行時間限制和閑置工作監督程式。 一旦背景任務已經啟動,無論是因為觸發程式或是 App Service 呼叫,只要在 Run 方法中對 BackgroundTaskInstance 採取延遲操作,就可以無限期地執行。 如果應用程式設定為 受 Windows 管理,則它可能仍會受到能源配額的限制,並且當省電模式啟用時,背景工作將不會啟動。 這可以使用OS設定來變更。 如需更多資訊,請參閱優化背景活動

通用 Windows 平臺會監視背景工作執行,以確保良好的電池使用時間和順暢的前景應用程式體驗。 不過,個人應用程式和企業關鍵業務應用程式可以使用延伸執行和 extendedBackgroundTaskTime 功能來建立應用程式,無論裝置的資源可用性如何,都會視需要執行。

請注意,extendedExecutionUnconstrainedextendedBackgroundTaskTime 這些功能可以覆寫 UWP 應用程式的預設政策,並可能導致電池電量顯著耗損。 使用這些功能之前,請先確認預設延伸執行和背景工作時間原則不符合您的需求,並在電池限制條件下執行測試,以瞭解您的應用程式對裝置的影響。

另請參閱

拿掉背景工作資源限制