共用方式為


Windows 8.1 中市集裝置應用程式的裝置同步處理和更新

在 Windows 8.1 中,UWP app 可以使用裝置背景工作來同步處理周邊裝置上的數據。 如果您的應用程式與裝置元數據相關聯,該 UWP 裝置應用程式也可以使用裝置背景代理程式來執行裝置更新,例如韌體更新。 裝置背景代理程式受限於原則,可確保使用者同意並協助在裝置同步處理和更新時保留電池使用時間。

若要執行裝置同步和更新作業,請分別建立使用 DeviceUseTriggerDeviceServicingTrigger 的裝置背景工作。 若要瞭解如何使用 自定義 USB 裝置範例來完成此操作,請參閱 建立裝置背景工作

注意

Windows 執行階段 裝置 API 不需要裝置元數據。 這表示您的應用程式不需要是UWP裝置應用程式才能使用它們。 UWP 應用程式可以使用這些 API 來存取 USB、Human Interface Devices (HID)、藍牙 裝置等等。 如需詳細資訊,請參閱 整合裝置

裝置背景工作概觀

當使用者將 UWP 應用程式移出畫面時,Windows 會暫停您的 App 記憶體內部。 這可讓另一個應用程式具有前景。 當應用程式暫停時,它位於記憶體中,而 Windows 已停止其執行。 發生這種情況時,如果沒有裝置背景工作的協助,任何進行中的裝置作業,例如同步處理和更新都會中斷。 Windows 8.1 提供兩個新的背景工作觸發程式,可讓您的應用程式在背景安全地在周邊裝置上執行長時間執行的同步處理和更新作業,即使您的應用程式已暫停:DeviceUseTrigger 和 DeviceServicingTrigger。 如需應用程式暫停的詳細資訊,請參閱啟動、繼續和多任務。

背景工作觸發程式 需要裝置元數據 描述
DeviceUseTrigger No 當您的應用程式暫停時,可讓您在周邊裝置上或從您的周邊裝置執行長時間執行的同步處理作業。 在背景同步您的裝置,需要您的使用者已核准應用程式的背景同步處理。 您的裝置也必須連線到計算機或與計算機配對,且具有作用中的 I/O,且最多允許 10 分鐘的背景活動。 本主題稍後將詳細說明原則強制執行。
DeviceServicingTrigger Yes nables 長時間執行的裝置更新,例如設定傳輸或韌體更新,而您的應用程式暫停。 在背景更新您的裝置時,每次使用背景工作時,都需要使用者核准。 不同於 DeviceUseTrigger 背景工作,DeviceServicingTrigger 背景工作允許裝置重新啟動和中斷連線,並允許最多 30 分鐘的背景活動。 本主題稍後將詳細說明原則強制執行。

DeviceServicingTrigger 需要裝置元數據,因為應用程式必須指定為特殊許可權應用程式,才能執行裝置更新作業。

應用程式許可權

某些重要的裝置作業,例如長時間執行的裝置更新,只能由特殊許可權應用程式執行。 特殊許可權應用程式是裝置製造商授權執行這些作業的應用程式。 裝置元數據會指定哪個應用程式,如果有的話,已指定為裝置的特殊許可權應用程式。

使用裝置元數據精靈建立裝置元數據時,請在 [指定 UWP 裝置應用程式資訊] 頁面上指定您的應用程式。 如需詳細資訊,請參閱 步驟 2:建立 UWP 裝置應用程式的裝置元數據。

支援的通訊協定

使用 DeviceUseTrigger 和 DeviceServicingTrigger 的裝置背景工作,可讓您的應用程式透過 UWP 應用程式通常所使用的系統觸發工作不支援的通訊協定與周邊裝置通訊。

通訊協定 DeviceServicingTrigger DeviceUseTrigger 系統觸發程式
USB deviceservicingtrigger supports usb. deviceusetrigger supports usb system triggers do not support usb
deviceservicingtrigger supports hid. deviceusetrigger supports hid system triggers do not support hid
藍牙 RFCOMM deviceservicingtrigger supports bluetooth rfcomm. deviceusetrigger supports bluetooth rfcomm system triggers do not support bluetooth rfcomm
藍牙 GATT deviceservicingtrigger supports bluetooth gatt. deviceusetrigger supports bluetooth gatt system triggers do not support bluetooth gatt
MTP deviceservicingtrigger supports mtp. deviceusetrigger does not support mtp system triggers do not support mtp
網路有線 deviceservicingtrigger supports network wired. deviceusetrigger does not support network wired system triggers do not support network wired
網路Wi-Fi deviceservicingtrigger supports networked wi-fi. deviceusetrigger does not support networked wi-fi system triggers do not support network wi-fi
IDeviceIOControl deviceservicingtrigger supports ideviceiocontrol. deviceusetrigger does not support ideviceiocontrol system triggers do not support ideviceiocontrol

在應用程式套件指令清單中註冊背景工作

您的應用程式會在在背景工作中執行的程式代碼中執行同步處理和更新作業。 此程式代碼內嵌在實作IBackgroundTask的 Windows 執行階段 類別中(或 JavaScript 應用程式的專用 JavaScript 頁面)。 若要使用裝置背景工作,您的應用程式必須在前景應用程式的應用程式指令清單檔案中宣告它,就像系統觸發的背景工作一樣。

在此應用程式套件指令清單檔案的範例中, DeviceLibrary.SyncContentDeviceLibrary.UpdateFirmware 是前景應用程式的進入點。 DeviceLibrary.SyncContent 是使用 DeviceUseTrigger 的背景工作進入點。 DeviceLibrary.UpdateFirmware 是使用 DeviceServicingTrigger 的背景工作進入點。

<Extensions>
  <Extension Category="windows.backgroundTasks" EntryPoint="DeviceLibrary.SyncContent">
    <BackgroundTasks>
      <m2:Task Type="deviceUse" /> 
    </BackgroundTasks>
  </Extension>
  <Extension Category="windows.backgroundTasks" EntryPoint="DeviceLibrary.UpdateFirmware">
    <BackgroundTasks>
      <m2:Task Type="deviceServicing" /> 
    </BackgroundTasks>
  </Extension>
</Extensions>

搭配裝置背景工作使用您的裝置

若要開發您的應用程式以利用 DeviceUseTrigger 和 DeviceServicingTrigger 背景工作,請遵循這組基本步驟。 如需背景工作的詳細資訊,請參閱 使用背景工作支援您的應用程式。

  1. 您的應用程式會在應用程式指令清單中註冊其背景工作,並將背景工作程式碼內嵌在實作IBackgroundTask的 Windows 執行階段 類別中,或在JavaScript 應用程式的專用 JavaScript 頁面中。

  2. 當您的應用程式啟動時,它會建立並設定適當類型的裝置觸發程序物件,即 DeviceUseTrigger 或 DeviceServicingTrigger,並儲存觸發程式實例以供日後使用。

  3. 您的應用程式會檢查背景工作是否先前已註冊,如果不是,則會針對裝置觸發程式進行註冊。 請注意,您的應用程式不允許在與此觸發程式相關聯的工作上設定條件。

  4. 當您的應用程式需要觸發背景工作時,它會在裝置觸發程式物件上呼叫 RequestAsync 啟用方法。

  5. 您的背景工作不會像其他系統背景工作一樣進行節流處理(沒有 CPU 時間配額),但會以較低的優先順序執行,讓前景應用程式保持回應。

  6. 接著,Windows 會根據觸發程式類型來驗證已符合必要原則,包括在啟動背景工作之前要求使用者同意作業。

  7. Windows 會監視系統條件和工作運行時間,如有必要,如果不再符合必要條件,則會取消工作。

  8. 當背景工作報告進度或完成時,您的應用程式會透過已註冊工作上的進度和已完成事件來接收這些事件。

使用裝置背景工作時要考慮的要點

  • Windows 8.1 中引進了以程式設計方式觸發使用 DeviceUseTrigger 和 DeviceServicingTrigger 的背景工作,且僅限於裝置背景工作。

  • Windows 會強制執行特定原則,以確保使用者在更新其周邊裝置時同意。 在同步和更新周邊裝置時,會強制執行額外的原則,以保留使用者的電池使用時間。

  • 當特定原則需求不再符合時,Windows 可能會取消使用 DeviceUseTrigger 和 DeviceServicingTrigger 的背景工作,包括背景時間上限(時鐘時間)。 使用這些背景工作與周邊裝置互動時,請務必考慮這些原則需求。

提示

若要查看這些背景工作的運作方式,請下載範例。 自定義 USB 裝置範例示範背景工作,以使用 DeviceUseTrigger 執行裝置同步處理。

使用 DeviceUseTrigger 或 DeviceServicingTrigger 時,Windows 8.1 會強制執行原則,以確保使用者在同步處理和更新內容的背景中授與應用程式存取其裝置的許可權。 原則也會強制執行,以協助在同步和更新周邊裝置時保留使用者電池使用時間。

使用DeviceUseTrigger的背景工作需要一次性使用者同意,讓您的app能夠在背景同步處理。 此同意會儲存每個應用程式和每一裝置型號。 使用者同意讓應用程式在背景存取裝置,就像他們同意讓應用程式在前景時存取裝置一樣。

在下列範例中,名為TailspinToys的應用程式會取得使用者在背景同步處理的許可權。

device sync user consent message dialog.

如果使用者稍後改變想法,他們可以撤銷 設定 中的許可權。

device sync permissions setting dialog.

不同於使用 DeviceUseTrigger 的背景工作,每次觸發背景工作時,使用 DeviceServicingTrigger 背景工作的背景工作都需要使用者同意。 此同意不會像 DeviceUseTrigger 一樣儲存。 這是因為與裝置韌體更新相關的高風險作業,以及裝置更新所需的較長時間。 除了取得使用者同意之外,Windows 還會為使用者提供裝置更新的相關信息,例如警告,讓裝置在整個更新期間保持連線,並確保電腦付費,以及作業的大約運行時間(如果您的應用程式提供)。

device update user consent message dialog.

頻率和前景限制

您的應用程式可以起始作業的頻率沒有限制,但您的應用程式一次只能執行一個 DeviceUseTrigger 或 DeviceServicingTrigger 背景工作作業(這不會影響其他類型的背景工作),而且只能在您的應用程式處於前景時起始背景工作。 當您的應用程式不在前景時,就無法使用DeviceUseTrigger或DeviceServicingTrigger起始背景工作。 您的應用程式無法在第一個背景工作完成之前起始第二個裝置背景工作。

裝置背景工作原則

當您的應用程式使用裝置背景工作時,Windows 會強制執行原則。 如果不符合這些原則,可能會取消使用 DeviceUseTrigger 或 DeviceServicingTrigger 的背景工作。 使用裝置背景工作與周邊裝置互動時,請務必考慮這些原則需求。

工作初始原則

下表指出哪些工作初始原則會套用至每個背景工作觸發程式。

原則 DeviceServicingTrigger DeviceUseTrigger
觸發背景工作時,您的UWP app位於前景。 policy applies. policy applies
您的裝置會連接到系統(或無線裝置的範圍)。 policy applies. policy applies
背景工作會在鎖定螢幕時每分鐘耗用 400 毫秒的 CPU 時間(假設 1GHz CPU),或螢幕未鎖定時每 5 分鐘。 不符合此原則可能會導致工作取消。 policy applies. policy applies
您的裝置可以使用裝置周邊 API 來存取應用程式(適用於 USB、HID、藍牙 等 Windows 執行階段 API)。 如果您的 app 無法存取裝置,則會拒絕存取背景工作。 policy applies. policy applies
應用程式所提供的背景工作進入點會在應用程式套件指令清單中註冊。 policy applies. policy applies
使用者已授與工作許可權以繼續。 每次。 第一次,然後由應用程式許可權控制。
應用程式所提供的時間估計小於30分鐘。 policy applies. policy does not apply
應用程式會指定為裝置的特殊許可權應用程式。 (必須符合裝置容器裝置元數據中具特殊許可權的應用程式清單的完整應用程式識別碼。 policy applies. policy does not apply
計算機剩餘的電池容量超過 33%, 或處於 AC 電源上。 policy applies. policy does not apply
每個作業類型只會執行一個裝置背景工作。 policy check applies. policy applies

運行時間原則檢查

當您的工作在背景中執行時,Windows 會強制執行下列運行時間原則需求。 如果任何運行時間需求停止為 true,Windows 將會取消您的裝置背景工作。

下表指出哪些運行時間原則會套用至每個背景工作觸發程式。

原則檢查 DeviceServicingTrigger DeviceUseTrigger
時鐘時間限制 – 應用程式工作可以在背景執行的總時間量。 30 分鐘 10 分鐘
您的裝置會連接到系統(或無線裝置的範圍)。 policy does not apply. policy check applies
工作正在對裝置執行一般 I/O(每 5 秒 1 個 I/O)。 policy does not apply. policy check applies
應用程式尚未取消工作。 policy check applies. policy check applies
應用程式尚未結束。 policy check applies. policy check applies

最佳作法

以下是使用裝置背景工作的UWP裝置應用程式最佳做法。

裝置背景工作程序設計模型

從您的應用程式使用DeviceUseTrigger或DeviceServicingTrigger背景工作,可確保如果使用者切換應用程式和前景應用程式已暫停Windows,從前景應用程式啟動的任何同步處理或裝置更新作業仍會繼續在背景執行。 建議您遵循此整體模型來註冊、觸發和取消註冊背景工作:

  1. 要求觸發程式之前,請先註冊背景工作。

  2. 連線 觸發程序的進度和完成事件處理程式。 當您的應用程式從暫停返回時,Windows 會提供您的應用程式任何佇列的進度或完成事件,可用來判斷背景工作的狀態。

  3. 當您觸發 DeviceUseTrigger 或 DeviceServicingTrigger 背景工作時,請關閉任何開啟的裝置物件,讓這些裝置可供背景工作開啟和使用。

  4. 註冊觸發程式。

  5. 當工作完成時,請取消註冊背景工作。 當您的背景工作完成時,您可以取消註冊背景工作,然後重新開啟裝置,並定期從 UWP 應用程式使用它。

  6. 註冊背景工作類別中的取消事件。 註冊取消事件可讓背景工作程序代碼在 Windows 或前景應用程式取消時,明確地停止執行中的背景工作。

  7. 在應用程式結束時(非暫停),取消註冊並取消任何執行中的工作。

    • 當您的應用程式結束時,請取消註冊並取消任何執行中的工作。

    • 當您的應用程式結束時,背景工作將會取消,而且任何現有的事件處理程式都會與現有的背景工作中斷連線。 這可防止您判斷背景工作的狀態。 取消註冊和取消背景工作可讓您的取消程式代碼清除背景工作。

提示

如需如何使用自定義 USB 裝置範例完成這項作業的詳細描述,請參閱建立裝置背景工作

取消背景工作

若要從前景應用程式取消在背景中執行的工作,請使用您在 app 中使用的 BackgroundTaskRegistration 物件上的 Unregister 方法來註冊 DeviceUseTriggerDeviceServicingTrigger 背景工作。 使用 BackgroundTaskRegistration 上的 Unregister 方法取消註冊背景工作,會導致背景工作基礎結構取消背景工作。

Unregister 方法會額外採用布爾值 true 或 false 值,以指出目前執行中背景工作的實例是否應該取消,而不允許它們完成。 如需詳細資訊,請參閱 BackgroundTaskRegistration.UnregisterAPI 參考。

建立裝置背景工作

自定義 USB 裝置範例

Launching, resuming, and multitasking

使用背景工作支援您的應用程式