使用背景工作支援應用程式
本節中的主題介紹如何使輕量型程式碼在背景執行以回應觸發程序。 您可以使用背景工作,在應用程式暫停或未執行時提供功能。 您也可以利用背景工作來執行即時通訊應用程式,如 VOIP、郵件和 IM。
在背景播放媒體
從 Windows 10 版本 1607 開始,在背景播放音訊變得更容易。 如需詳細資訊,請參閱在背景 播放媒體。
同處理序和跨處理序的背景工作
實作背景工作的方法有兩種:
- 同處理序:應用程式及其背景處理序會在相同的處理序中執行
- 跨處理序:應用程式和背景處理序在不同的處理序中執行。
Windows 10 版本 1607 引進了處理序背景支援,以簡化背景工作的撰寫。 但您仍然可以寫出跨處理序的背景工作。 如需撰寫處理序與跨處理序背景工作時機的建議,請參閱背景 工作的指導方針。
跨處理序背景工作更具彈性,因為背景處理序無法在發生問題時關閉您的應用程式處理序。 但復原功能代價是管理應用程式與背景工作之間跨處理序通訊的更高複雜性。
跨處理序背景工作會實作為輕量型類別,以實作 OS 在不同的處理序中執行的 IBackgroundTask 介面 (backgroundtaskhost.exe)。 使用 BackgroundTaskBuilder 類別註冊背景工作 。 當您註冊背景工作時,類別名稱是用來指定進入點。
在 Windows 10 版本 1607 中,您可以啟用背景活動,而不需建立背景工作。 您可以改為直接在前景應用程式的處理序中執行背景程式碼。
若要快速開始使用同處理序背景工作,請參閱建立及註冊同處理序背景工作。
若要快速開始使用跨處理序背景工作,請參閱建立及註冊跨處理序背景工作。
提示
從 Windows 10 開始,您不再需要將應用程式放在鎖定畫面上,作為註冊背景工作的必要條件。
系統事件的背景工作
您的應用程式可以藉由向 SystemTrigger 類別註冊背景工作,以回應系統產生的事件。 應用程式可以使用下列任何系統事件觸發程序 (定義於 SystemTriggerType 中)
觸發程序名稱 | 描述 |
---|---|
InternetAvailable | 網際網路可供使用。 |
NetworkStateChange | 發生網路變更,例如成本或連線功能變更。 |
OnlineIdConnectedStateChange | 與帳戶關聯的線上識別碼已變更。 |
SmsReceived | 安裝行動寬頻的裝置已接收到一則新簡訊。 |
TimeZoneChange | 裝置上的時區變更 (例如,當系統調整時鐘以適應日光節約時間時)。 |
有關詳細資訊,請參閱使用背景工作回應系統事件。
背景工作的條件
您可以透過新增條件,在背景工作即使觸發後,控制它執行的時間。 觸發之後,背景工作將不會執行,直到符合其所有條件為止。 您可以使用下列條件 (由 SystemConditionType 列舉表示)。
條件名稱 | 描述 |
---|---|
InternetAvailable | 網際網路必須可使用。 |
InternetNotAvailable | 網際網路必須無法使用。 |
SessionConnected | 工作階段必須連接。 |
SessionDisconnected | 工作階段必須中斷連接。 |
UserNotPresent | 使用者必須離開。 |
UserPresent | 使用者必須在場。 |
新增 InternetAvailable 條件至您的背景工作 BackgroundTaskBuilder.AddCondition 可延遲觸發背景工作,直到網路堆疊執行。 這個條件可以節省電源,因為直到網路可用前,背景工作都不會執行。 這個條件不提供即時啟動。
如果您的背景任務需要網路連線,請設定 IsNetworkRequested,以確保在背景工作執行時保持網路連線。 這會告訴背景工作基礎結構在工作執行時隨時保持網路連線,即使裝置已進入 [連線待命] 模式。 如果您的背景工作不設定 IsNetworkRequested,則處於 [連線待命] 模式時 (例如,當手機螢幕關閉時) 背景工作將無法存取網路。 如需背景工作條件的詳細資訊,請參閱設定執行背景工作的條件。
應用程式資訊清單需求
您的應用程式必須先在應用程式資訊清單中宣告它,才能成功註冊跨處理序的背景工作。 在與其主應用程式相同的處理序中執行的背景工作,不需要在應用程式資訊清單中宣告。 如需詳細資訊,請參閱在應用程式資訊清單中宣告背景工作。
背景工作
下列即時觸發程序可用來在背景中執行輕量型自訂程式碼:
即時觸發程序 | 描述 |
---|---|
控制通道 | 背景工作可以使用 ControlChannelTrigger 讓連線保持運作,並在控制通道上接收訊息。 如果您的應用程式正在接聽通訊端,您可以使用通訊端代理程式,而不是 ControlChannelTrigger。 如需使用通訊端代理程式的詳細資訊,請參閱 SocketActivityTrigger。 Windows Phone 不支援 ControlChannelTrigger。 |
計時器 | 背景工作可以每隔 15 分鐘執行一次,而且可以使用 TimeTrigger 設定為在特定時間執行。 如需詳細資訊,請參閱在定時器上執行背景工作。 |
推播通知 | 背景工作會回應 PushNotificationTrigger 以接收原始推播通知。 |
注意
通用 Windows 平台應用程式註冊任何背景觸發程序類型之前,必須呼叫 RequestAccessAsync。
為了確保通用 Windows 應用程式在您發行應用程式更新之後繼續正常執行,您必須呼叫 RemoveAccess,然後在應用程式更新後啟動時呼叫 RequestAccessAsync。 如需詳細資訊,請參閱背景任務指南。
觸發程序執行個體數目的限制:應用程式可以註冊的某些觸發程序執行個體有數目限制。 每個應用程式執行個體只能註冊 ApplicationTrigger、MediaProcessingTrigger 和 DeviceUseTrigger。 如果應用程式超過此限制,註冊將會擲回例外狀況。
系統事件觸發程序
SystemTriggerType 列舉代表下列系統事件觸發程序:
觸發程序名稱 | 描述 |
---|---|
UserPresent | 當使用者出現時,就會觸發背景工作。 |
UserAway | 當使用者不在場時,就會觸發背景工作。 |
ControlChannelReset | 重設控制通道時,會觸發背景工作。 |
SessionConnected | 連接工作階段時,將觸發背景工作。 |
當使用者在鎖定畫面上或關閉應用程式時,下列系統事件會觸發訊號。
觸發程序名稱 | 描述 |
---|---|
LockScreenApplicationAdded | 應用程式磚會新增至鎖定畫面。 |
LockScreenApplicationRemoved | 應用程式磚會從鎖定畫面中移除。 |
背景工作資源限制
背景工作是輕量型工作。 將背景執行保持在最低狀態,可確保前景應用程式和電池使用時間的最佳使用者體驗。 這會透過對背景工作施加資源限制來實現這一點。
背景工作的執行時間限制為 30 秒。
記憶體限制
由於低記憶體裝置的資源限制,背景工作可能會有記憶體限制,可決定背景工作可以使用的最大記憶體數量。 如果您的背景工作嘗試超過此限制的作業,作業將會失敗,而且可能會產生記憶體不足的例外狀況,而工作可以處理此例外狀況。 如果工作未處理記憶體不足的例外狀況,或嘗試作業的性質未產生記憶體不足例外狀況,則會立即終止工作。
您可以使用 MemoryManager API 來查詢您目前的記憶體使用量和限制,以探索使用量上限 (如果有的話),以及監視背景工作的進行中記憶體使用量。
具有低記憶體裝置背景工作之應用程式的個別裝置限制
在有記憶體限制的裝置上,同一時間裝置上可安裝並使用背景工作的應用程式會有數量上的限制。 如果超過此數目,則需要註冊的所有背景工作都需呼叫的 RequestAccessAsync 將會失敗。
省電模式
若您不將應用程式排除,使其在省電模式啟用時仍可執行背景任務並接收推播通知,啟用省電功能時,當裝置未連接外部電源且電池剩餘電量低於指定值時,將會阻止背景任務工作。 這不會阻止您註冊背景工作。
不過,對於不會在 Microsoft Store 中發佈的企業應用程式和應用程式,請參閱在背景無限期執行,以瞭解如何使用功能在背景執行背景工作或無限期延長執行工作階段。
即時通訊的背景工作資源保證
為了避免資源配額干擾即時通訊功能,使用 ControlChannelTrigger 和 PushNotificationTrigger 的背景工作會針對每個執行中工作接收保證的 CPU 資源配額。 資源配額如上述所述,並針對這些背景工作維持不變。
您的應用程式不需要以不同的方式執行任何動作,即可取得 ControlChannelTrigger 和 PushNotificationTrigger 背景工作的保證資源配額。 系統一律會將這些項目視為重要的背景工作。
維護觸發程序
只有在裝置插上 AC 電源時,才會執行維護工作。 如需詳細資訊,請參閱使用維護觸發程序。
感應器和裝置的背景工作
您的應用程式可以使用 DeviceUseTrigger 類別,從背景工作存取 感應器和週邊裝置。 您可以將此觸發程序用於長時間執行的作業,例如資料同步處理或監視。 不同於系統事件的工作,DeviceUseTrigger 工作只能在您的應用程式在前景執行時觸發,而且無法設定任何條件。
重要
DeviceUseTrigger 和 DeviceServicingTrigger 無法與同處理序背景工作搭配使用。
某些重要的裝置作業,例如長時間執行的韌體更新,無法使用 DeviceUseTrigger來執行。 這類作業只能在電腦上執行,而且只能由使用 DeviceServicingTrigger 的特殊許可權應用程式執行。 特殊許可權應用程式是裝置製造商授權執行這些作業的應用程式。 裝置中繼資料是用來指定哪個應用程式,如果有的話,已指定為裝置的特殊權限應用程式。 如需詳細資訊,請參閱 Microsoft Store 裝置應用程式的裝置同步處理和更新。
管理背景工作
背景工作可以使用事件和本機儲存裝置,向您的應用程式報告進度、完成和取消。 您的應用程式也可以攔截背景工作擲回的例外狀況,並在應用程式更新期間管理背景工作註冊。 如需詳細資訊,請參閱:
在應用程式啟動期間檢查背景工作註冊。 請確定您的應用程式未分組的背景工作會出現在 BackgroundTaskBuilder.AllTasks 中。 重新註冊未出現的應用程式。 取消註冊不再需要的任何工作。 這可確保每次啟動應用程式時,所有背景工作註冊都是最新的。
相關主題
Windows 10 中多工處理的概念指引
相關背景工作指引