延長執行會話讓你的應用程式能請求系統在特定情境下持續運行,即使這在電池供電裝置上本可能減少資源。 雖然桌面應用程式不會自動暫停,但延長執行仍有助於向系統傳達意圖。
Important
桌面應用程式無論是否使用延伸執行,都會繼續運行。 在桌面應用程式中使用 ExtendedExecutionSession 的主要好處,是讓系統知道目前的工作很重要,不應遭到 Modern Standby 或電池節約模式等省電措施中斷。
何時使用擴展執行
延長執行會話在桌面應用程式中最為有用,用於:
- 儲存關鍵資料 — 確保大型儲存操作在裝置進入待機前完成。
- 位置追蹤 — 在筆記型電腦上將應用程式最小化時,持續傳送 GPS 資料。
- 長期運算 — 完成渲染、編譯或資料分析任務。
對於桌面應用程式需要持續運行的情況(例如聊天應用程式或音樂播放器),你 不需要 延長執行——應用程式會正常運行。
建立延伸執行工作階段
使用 ExtendedExecutionSession 類別:
using Windows.ApplicationModel.ExtendedExecution;
private ExtendedExecutionSession? _session;
private async Task StartExtendedSessionAsync()
{
var session = new ExtendedExecutionSession
{
Reason = ExtendedExecutionReason.Unspecified,
Description = "Completing critical data save"
};
session.Revoked += ExtendedSession_Revoked;
ExtendedExecutionResult result = await session.RequestExtensionAsync();
if (result == ExtendedExecutionResult.Allowed)
{
_session = session;
// Proceed with the long-running work
}
else
{
session.Dispose();
// The system denied the request — handle gracefully
}
}
private void ExtendedSession_Revoked(object sender,
ExtendedExecutionRevokedEventArgs args)
{
// The session was revoked. Save state quickly.
if (args.Reason == ExtendedExecutionRevokedReason.SystemPolicy)
{
// System needs resources — wrap up immediately
}
}
延長執行原因
| Reason | 應用案例 |
|---|---|
SavingData |
你的應用程式需要完成一個存檔操作 |
LocationTracking |
你的應用程式正在追蹤使用者的位置 |
Unspecified |
其他長時間執行的工作 |
Note
LocationTracking 需要在應用程式資訊清單中宣告 location 功能,並取得使用者同意。
結束本次會議
完成工作後,處理該會話以釋放請求:
private ExtendedExecutionSession? _session;
private void ExtendedSession_Revoked(object sender,
ExtendedExecutionRevokedEventArgs args)
{
}
private void StopExtendedSession()
{
if (_session != null)
{
_session.Revoked -= ExtendedSession_Revoked;
_session.Dispose();
_session = null;
}
}
與 UWP 的差異
| 行為 | UWP | 桌面 |
|---|---|---|
| Purpose | 防止懸吊 | 顯示其對電源管理的重要性 |
| App 在沒有它的情況下還是會繼續運行 | 不行 — UWP 應用程式會暫停 | 是的——桌面應用程式可以正常運行 |
| 會議撤銷 | 可能導致停權 | 不會讓應用程式停止使用,但可能會有省電效果 |
SavingData 原因 |
防止在儲存期間進入暫停狀態 | API 一樣,但因為應用程式不會暫停,所以這點比較不重要 |
最佳做法
- 只有在你有明確的工作,而且該工作不應因省電功能而中斷時,才請求延長執行。
- 即使是桌面應用程式,也一定要處理
Revoked事件。 - 工作完成後立即處理該會話。
- 不要無限期長時間使用——這會影響裝置的電池續航。