如何使用 ServicingComplete 觸發程序 (HTML)
[ 本文的目標對象是撰寫 Windows 執行階段 App 的 Windows 8.x 和 Windows Phone 8.x 開發人員。如果您正在開發適用於 Windows 10 的 App,請參閱 最新文件 ]
了解如何使用 ServicingComplete SystemTrigger 在應用程式更新後控制背景工作登錄。
您必須知道的事
技術
先決條件
- 本主題適用於任何執行一或多個背景工作的應用程式。如需撰寫背景工作類別的詳細資訊,請參閱快速入門:建立並登錄背景工作。
指示
步驟 1: 建立 ServicingComplete 背景工作
背景工作登錄會在應用程式更新中持續進行。如果更新某應用程式,該應用程式的登錄就會繼續有效,且將被觸發。應用程式可使用 ServicingComplete 觸發程序來登錄背景工作,以在應用程式更新時收到通知,然後在背景工作無效時,取消其登錄。
為背景工作建立新的 JavaScript 檔案。
下列範例程式碼會示範背景工作的基本起點:
// // ServicingCompleteTask.js // (function () { "use strict"; // // This function does the work of the ServicingComplete background task. // function doWork() { // // A JavaScript background task must call close when it is done. // close(); } doWork(); })();
尋找需要取消登錄之背景工作的登錄物件。呼叫 Unregister 取消工作的登錄。請注意,您可以將 cancelTask 參數設定為 true,強制停止執行背景工作 (如果執行個體作用中)。
// // ServicingCompleteTask.js // (function () { "use strict"; // // This function does the work of the ServicingComplete background task. // function doWork() { // // Unregister tasks that no longer exist. // var unregisterTask = "BadTaskName"; var unregTask = FindTask(unregisterTask); if (unregTask != null) { unregTask.Unregister(true); } // // A JavaScript background task must call close when it is done. // close(); } // // Check for a registration of the named background task. If one exists, // return it. // function FindTask(taskName) { var taskRegistered = false; var background = Windows.ApplicationModel.Background; var iter = background.BackgroundTaskRegistration.allTasks.first(); var hascur = iter.hasCurrent; while (hascur) { var cur = iter.current.value; if (cur.name === taskName) { return cur; } hascur = iter.moveNext(); } } doWork(); })();
視需要登錄取代工作。使用背景工作登錄函式 (如如何登錄背景工作所指定的函式),可簡化您的工作。
// // ServicingCompleteTask.js // (function () { "use strict"; // // This function does the work of the ServicingComplete background task. // function doWork() { // // Unregister tasks that no longer exist. // var unregisterTask = "BadTaskName"; var unregTask = FindTask(unregisterTask); if (unregTask != null) { unregTask.Unregister(true); } // // Register new/replacement tasks. // var newTaskName = "New Background Task"; var newTaskEntryPoint = "js\\NewBackgroundTask.js"; var background = Windows.ApplicationModel.Background; var internetTrigger = new background.SystemTrigger( background.SystemTriggerType.internetAvailable, false); var newTask = RegisterBackgroundTask(newTaskEntryPoint, newTaskName, internetTrigger, null); // // A JavaScript background task must call close when it is done. // close(); } // // Check for a registration of the named background task. If one exists, // return it. // function FindTask(taskName) { var taskRegistered = false; var background = Windows.ApplicationModel.Background; var iter = background.BackgroundTaskRegistration.allTasks.first(); var hascur = iter.hasCurrent; while (hascur) { var cur = iter.current.value; if (cur.name === taskName) { return cur; } hascur = iter.moveNext(); } } doWork(); })();
步驟 2: 登錄 ServicingComplete 背景工作
ServicingComplete 背景工作應與其他背景工作一起登錄,這樣當應用程式更新時才能觸發。ServicingComplete 背景工作的進入點必須和應用程式更新的進入點一樣。
建立新的 SystemTrigger 物件:
第一個參數 triggerType 應該要設為 servicingComplete。
第二個參數 OneShot 應該要設為 false。
此範例程式碼會建立 ServicingComplete 觸發程序:
var background = Windows.ApplicationModel.Background; var servicingCompleteTrigger = new background.SystemTrigger( background.SystemTriggerType.servicingComplete, false);
注意 不建議將條件新增至 ServicingComplete 背景工作觸發程序。
呼叫您的背景工作登錄函式,以登錄工作。如需登錄背景工作的詳細資訊,請參閱如何登錄背景工作。
下列程式碼會登錄 ServicingComplete 工作:
var entryPoint = "js\\ServicingCompleteTask.js"; var taskName = "ServicingComplete background task"; var task = RegisterBackgroundTask(entryPoint, taskName, servicingCompleteTrigger, null);
注意 在「Windows Phone 市集」應用程式中,登錄任何背景工作之前,都必須先呼叫 RequestAccessAsync 一次。
步驟 3: 在套件資訊清單中宣告背景工作
ServicingComplete 背景工作必須列示在套件資訊清單中,就像任何其他背景工作一樣。如需詳細資訊,請參閱如何在應用程式資訊清單中宣告背景工作。例如:
備註
如需使用背景工作偵錯 app 更新的相關重要資訊,請參閱如何偵錯背景工作 (Windows 市集 app)。