使用維護觸發程序

重要 API

了解如何在裝置使用 AC 電源時,使用 MaintenanceTrigger 類別於背景中執行輕量型程式碼。

建立維護觸發程序物件

此範例假設您有輕量型程式碼,可以在接上裝置時於背景執行,以增強應用程式。 本主題的重點是 MaintenanceTrigger,類似於 SystemTrigger

如需撰寫背景工作類別的詳細資訊,請參閱建立及註冊同處理序的背景工作建立及註冊跨處理序的背景工作

建立新的 MaintenanceTrigger 物件。 第二個參數 OneShot 會指定維護工作只會執行一次或定期持續執行。 如果 OneShot 設定為 true,則第一個參數 (FreshnessTime) 會指定排程背景工作之前要等候的分鐘數。 如果 OneShot 設定為 false,FreshnessTime 會指定背景工作執行的頻率。

注意

如果 FreshnessTime 設定為小於 15 分鐘,嘗試註冊背景工作時會擲回例外狀況。

此範例程式碼會建立每小時執行一次的觸發程序。

uint waitIntervalMinutes = 60;
MaintenanceTrigger taskTrigger = new MaintenanceTrigger(waitIntervalMinutes, false);
uint32_t waitIntervalMinutes{ 60 };
Windows::ApplicationModel::Background::MaintenanceTrigger taskTrigger{ waitIntervalMinutes, false };
unsigned int waitIntervalMinutes = 60;
MaintenanceTrigger ^ taskTrigger = ref new MaintenanceTrigger(waitIntervalMinutes, false);

(選擇性) 新增條件

  • 如有必要,請建立背景工作條件來控制工作何時執行。 條件會防止背景工作執行,直到符合條件為止 - 如需詳細資訊,請參閱 設定執行背景工作的條件

在此範例中,條件會設定為 InternetAvailable ,以便在網際網路可用時執行維護 (或可用時)。 如需可能的背景工作條件清單,請參閱 SystemConditionType

下列程式碼會將條件新增至維護工作建立器:

SystemCondition exampleCondition = new SystemCondition(SystemConditionType.InternetAvailable);
Windows::ApplicationModel::Background::SystemCondition exampleCondition{
    Windows::ApplicationModel::Background::SystemConditionType::InternetAvailable };
SystemCondition ^ exampleCondition = ref new SystemCondition(SystemConditionType::InternetAvailable);

登錄背景工作

  • 呼叫背景工作註冊函式來註冊背景工作。 如需註冊背景工作的詳細資訊,請參閱註冊背景工作

下列程式碼會註冊維護工作。 請注意,它會假設背景工作會在與應用程式不同的程序中執行,因為它指定 entryPoint。 如果您的背景工作在與應用程式相同的程序中執行,就不用指定 entryPoint

string entryPoint = "Tasks.ExampleBackgroundTaskClass";
string taskName   = "Maintenance background task example";

BackgroundTaskRegistration task = RegisterBackgroundTask(entryPoint, taskName, taskTrigger, exampleCondition);
std::wstring entryPoint{ L"Tasks.ExampleBackgroundTaskClass" };
std::wstring taskName{ L"Maintenance background task example" };

Windows::ApplicationModel::Background::BackgroundTaskRegistration task{
    RegisterBackgroundTask(entryPoint, taskName, taskTrigger, exampleCondition) };
String ^ entryPoint = "Tasks.ExampleBackgroundTaskClass";
String ^ taskName   = "Maintenance background task example";

BackgroundTaskRegistration ^ task = RegisterBackgroundTask(entryPoint, taskName, taskTrigger, exampleCondition);

注意

針對桌上型電腦以外的所有裝置系列,如果裝置記憶體不足,背景工作可能會終止。 如果未顯示記憶體不足例外狀況,或應用程式未處理例外狀況,則背景工作將會在沒有警告的情況下終止,並且不會觸發 OnCanceled 事件。 這有助於確保應用程式在前景的使用者體驗。 您的背景工作應該設計為處理此案例。

注意

通用 Windows 平台應用程式註冊任何背景觸發程序類型之前,必須呼叫 RequestAccessAsync

為了確保通用 Windows 應用程式在您發行應用程式更新之後繼續正常執行,您必須呼叫 RemoveAccess,然後在應用程式更新後啟動時呼叫 RequestAccessAsync。 如需詳細資訊,請參閱背景任務指南

注意

註冊時會驗證背景工作註冊參數。 如果任何註冊參數無效,則會傳回錯誤。 請確定您的應用程式可正常處理背景工作註冊失敗的案例,如果您的應用程式在嘗試註冊工作之後依賴有效的註冊物件,它可能會當機。