共用方式為


如何使用 ServicingComplete 觸發程序 (HTML)

[ 本文的目標對象是撰寫 Windows 執行階段 App 的 Windows 8.x 和 Windows Phone 8.x 開發人員。如果您正在開發適用於 Windows 10 的 App,請參閱 最新文件 ]

了解如何使用 ServicingComplete SystemTrigger 在應用程式更新後控制背景工作登錄。

您必須知道的事

技術

先決條件

指示

步驟 1: 建立 ServicingComplete 背景工作

背景工作登錄會在應用程式更新中持續進行。如果更新某應用程式,該應用程式的登錄就會繼續有效,且將被觸發。應用程式可使用 ServicingComplete 觸發程序來登錄背景工作,以在應用程式更新時收到通知,然後在背景工作無效時,取消其登錄。

  1. 為背景工作建立新的 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();
    
    })();
    
  2. 尋找需要取消登錄之背景工作的登錄物件。呼叫 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();
    
    })();
    
  3. 視需要登錄取代工作。使用背景工作登錄函式 (如如何登錄背景工作所指定的函式),可簡化您的工作。

    //
    // 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 背景工作的進入點必須和應用程式更新的進入點一樣。

  1. 建立新的 SystemTrigger 物件:

    • 第一個參數 triggerType 應該要設為 servicingComplete

    • 第二個參數 OneShot 應該要設為 false

    此範例程式碼會建立 ServicingComplete 觸發程序:

    
    var background = Windows.ApplicationModel.Background;
    
    var servicingCompleteTrigger = new background.SystemTrigger(
                            background.SystemTriggerType.servicingComplete, false);
    

    注意  不建議將條件新增至 ServicingComplete 背景工作觸發程序。

     

  2. 呼叫您的背景工作登錄函式,以登錄工作。如需登錄背景工作的詳細資訊,請參閱如何登錄背景工作

    下列程式碼會登錄 ServicingComplete 工作:

    var entryPoint = "js\\ServicingCompleteTask.js";
    var taskName = "ServicingComplete background task";
    
    var task = RegisterBackgroundTask(entryPoint,
                                      taskName, 
                                      servicingCompleteTrigger, 
                                      null);
    

    注意  在「Windows Phone 市集」應用程式中,登錄任何背景工作之前,都必須先呼叫 RequestAccessAsync 一次。

步驟 3: 在套件資訊清單中宣告背景工作

ServicingComplete 背景工作必須列示在套件資訊清單中,就像任何其他背景工作一樣。如需詳細資訊,請參閱如何在應用程式資訊清單中宣告背景工作。例如:

在 app 資訊清單中宣告 ServicingCompleteTask

備註

如需使用背景工作偵錯 app 更新的相關重要資訊,請參閱如何偵錯背景工作 (Windows 市集 app)

相關主題

快速入門:建立並登錄背景工作

如何登錄背景工作

如何使用背景工作回應系統事件

如何設定執行背景工作的條件

如何在應用程式資訊清單中宣告背景工作

如何偵錯背景工作

背景工作的指導方針和檢查清單