如何在計時器上執行背景工作 (HTML)
[ 本文的目標對象是撰寫 Windows 執行階段 App 的 Windows 8.x 和 Windows Phone 8.x 開發人員。如果您正在開發適用於 Windows 10 的 App,請參閱 最新文件 ]
了解如何排程一次性的背景工作,或定期執行相關 Windows 市集應用程式的背景工作。 如果使用者將您的應用程式放在鎖定畫面上,應用程式就可以登錄最多每隔 15 分鐘 (在 Windows 上) 或每隔 30 分鐘 (在 Windows Phone 上) 執行一次的背景工作。例如,背景工作可以用來提供定期的磚或徽章更新。
您必須知道的事
技術
先決條件
- 這個範例假設您有需要定期或在特定時間執行的背景工作,以支援應用程式。在 Windows 上,如果您透過呼叫 RequestAccessAsync 且使用者接受提示要求將應用程式放置在鎖定畫面,則背景工作只能使用 TimeTrigger 才能執行。在 Windows Phone 上,您必須呼叫 RequestAccessAsync,但是沒有使用者提示。如需詳細資訊,請參閱在鎖定畫面顯示磚。
- 本主題假設您已建立背景工作類別,包括做為背景工作進入點的 Run 方法。若要快速開始建立背景工作,請參閱快速入門:建立並登錄背景工作。如需條件與觸發程序的深入資訊,請參閱使用背景工作支援應用程式。
指示
步驟 1: 建立時間觸發程序
新建一個 TimeTrigger。第二個參數 OneShot 指定背景工作是要執行一次或定期執行。如果 OneShot 設定成 True,第一個參數 (FreshnessTime) 會指定排定背景工作之前要等待的時間 (單位:分鐘)。如果 OneShot 設定成 False,FreshnessTime 會指定背景工作的執行頻率。
Windows 8 具有內建計時器,會每隔 15 分鐘執行背景工作。請注意,Windows Phone 上是每隔 30 分鐘。
如果 FreshnessTime 設定為 15 分鐘,而且 OneShot 為 True,表示工作將會在工作登錄時間的 0 到 15 分鐘之間開始執行一次。
如果 FreshnessTime 設定為 15 分鐘,而且 OneShot 為 False,表示工作將會在工作登錄時間的 0 到 15 分鐘之間開始每隔 15 分鐘執行。
注意 如果 FreshnessTime 設定為少於 15 分鐘,則嘗試登錄背景工作時會擲回例外狀況。
例如,這個觸發程序將導致背景工作一個小時執行一次:
var hourlyTrigger = new Windows.ApplicationModel.Background.TimeTrigger(60, false);
步驟 2: (選用) 新增條件
如有需要,可新增背景工作條件以控制何時執行工作。在符合條件之前,條件會防止背景工作執行,如需詳細資訊,請參閱 如何設定執行背景工作的條件。
這個範例中,條件是設成 UserPresent,因此觸發後,工作只在使用者作用中時才會執行。如需可用條件的清單,請參閱 SystemConditionType。
下列程式碼會將條件新增到背景工作:
var userCondition = new Windows.ApplicationModel.Background.SystemCondition(Windows.ApplicationModel.Background.SystemConditionType.UserPresent);
步驟 3: 要求鎖定畫面存取
在嘗試登錄 TimeTrigger 背景工作之前,可以透過呼叫 RequestAccessAsync 向使用者要求要新增到鎖定畫面的權限。
在 Windows 上,下列程式碼會對使用者顯示對話方塊,以要求將您的應用程式新增到鎖定畫面:在 Windows Phone 上,這只是要求系統授予您應用程式執行背景工作的權限:
Windows.ApplicationModel.Background.BackgroundExecutionManager.RequestAccessAsync();
注意 應用程式只可以要求一次鎖定畫面存取權。使用者只能選擇這兩個選項的其中一項,這樣就會設定他們的喜好設定。對 RequestAccessAsync 的進一步呼叫將被忽略。
步驟 4: 登錄背景工作
呼叫背景工作登錄函式以登錄背景工作。如需登錄背景工作的詳細資訊,請參閱如何登錄背景工作。
下列程式碼會登錄背景工作:
var entryPoint = “js\\ExampleBackgroundTask.js”;
var taskName = “Example hourly background task”;
var task = RegisterBackgroundTask(entryPoint, taskName, hourlyTrigger, userCondition);
注意
從 Windows 8.1 開始,背景工作登錄參數都是在登錄時驗證。如果有任一個登錄參數無效,就會傳回錯誤。您的應用程式必須能夠處理背景工作登錄失敗的狀況,例如使用條件式陳述式來檢查登錄是否有錯誤,接著使用不同的參數值來重試已失敗的登錄。
備註
注意 在 Windows 上,如果使用者已經將您的應用程式新增到鎖定畫面 (或在您的應用程式要求存取時提供權限),背景工作只會使用時間觸發程序來登錄。請參閱在鎖定畫面顯示磚。背景工作可以和不需要應用程式在鎖定畫面上的觸發程序關聯。如需這些類型的背景工作觸發程序指引,請參閱使用背景工作支援應用程式。