共用方式為


如何在計時器上執行背景工作 (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 上,如果使用者已經將您的應用程式新增到鎖定畫面 (或在您的應用程式要求存取時提供權限),背景工作只會使用時間觸發程序來登錄。請參閱在鎖定畫面顯示磚。背景工作可以和不需要應用程式在鎖定畫面上的觸發程序關聯。如需這些類型的背景工作觸發程序指引,請參閱使用背景工作支援應用程式

 

相關主題

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

如何登錄背景工作

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

如何偵錯背景工作

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