如何暫停應用程式 (HTML)

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

了解如何在系統暫停您的 Windows 執行階段應用程式時,儲存重要的應用程式資料。 如果系統暫停您的應用程式,則稍後有可能不顯示警告就終止應用程式。重要的是將使用者的目前狀態儲存在應用程式中,這樣一來,當您重新啟動應用程式時,就可以還原該狀態。使用者不應知道應用程式已在背景中暫停和終止。

下列步驟將示範如何登錄 checkpoint 事件,並用它來儲存某些基本應用程式狀態。

指示

步驟 1: 登錄檢查點事件

在全域範圍中登錄 checkpoint 事件。這個事件表示您的應用程式已由系統暫停。您的應用程式暫停之後,系統可以終止該應用程式,以釋放系統資源。基於這個原因,請務必在檢查點事件期間儲存您的應用程式資料。


var app = WinJS.Application;

app.addEventListener("checkpoint", checkpointHandler);

步驟 2: 暫停之前,先儲存應用程式資料

當您的應用程式處理 checkpoint 事件時,有機會在 checkpoint 事件的處理常式函數中儲存自己的重要應用程式資料。應用程式可以使用 sessionState 物件來同步儲存簡單的應用程式資料。sessionState 物件會保存資料,這樣應用程式就可以在終止後的啟用期間存取它。

function checkpointHandler(eventArgs) 
{
    var stateObject = new Object();

    // TODO: Populate the state object with app data

    // Save the state object to the session object
    app.sessionState.stateObject = stateObject;
}

步驟 3: 釋放獨占資源及檔案控制代碼

當您的應用程式處理 checkpoint 事件時,也可以釋放獨占資源及檔案控制代碼。獨占資源的範例包括相機、I/O 裝置、外部裝置及網路資源。明確釋放獨占資源及檔案控制代碼,有助於確保當您的應用程式不使用這些資源時,其他應用程式仍然可以使用它們。如果在終止後重新啟用應用程式,則應該會開啟獨占資源及檔案控制代碼。

備註

當使用者切換至另一個應用程式或桌面時,系統會暫停您的應用程式。當使用者切換回您的 app 時,系統就會繼續執行 app 。當系統繼續執行您的 app 時,您的變數和資料結構內容和系統暫停 app 之前一樣,沒有變化。系統會將 app 回復成暫停之前的相同狀態,如此使用者會以為 app 一直在背景中執行。

當應用程式暫停時,系統會嘗試讓應用程式及其資料保留在記憶體中。不過,作業系統可以在暫停您的應用程式之後,基於一些原因來終止該應用程式。以下為發生此狀況的部分範例:使用者手動關閉您的應用程式、使用者登出,或者系統的資源不足。當使用者切換回已經終止的應用程式時,應用程式會收到 activated 事件,而且應該會檢查是已否定義其 sessionState 物件。如果已經定義物件,應用程式應該載入該資料。

系統不會在應用程式終止時提供通知,所以應用程式必須在暫停時儲存應用程式資料並釋放獨占資源及檔案控制代碼,並在暫停後繼續時或終止狀態結束後重新啟用時,還原這些項目。

注意  如果您需要在應用程式暫停時進行非同步工作,就必須延遲完成暫停,直到工作完成為止。您可以將 setPromise 方法用於 checkpoint 事件引數的 detail 屬性,以延遲完成暫停,直到完成 Promise 為止。

 

注意  為了改善 Windows 8.1 和 Windows Phone 的系統回應性,當應用程式暫停之後,存取資源的優先順序會變低。為了支援這個新的優先順序,會延長暫停作業逾時,在 Windows 上讓應用程式與標準優先順序一樣擁有 5 秒逾時,而在 Windows Phone 上則是介於 1 到 10 秒之間的逾時。 您無法延長或改變這個逾時長度。

 

使用 Microsoft Visual Studio 偵錯的注意事項: Visual Studio 會防止 Windows 暫停已連接至偵錯工具的 app。這是為了讓使用者在 app 執行時可以檢視 Visual Studio 偵錯 UI。當您正在對某個 app 偵錯時,您可以使用 Visual Studio 傳送一個暫停事件給該 app。 確定 [偵錯位置] 工具列已經顯示,然後按一下 [暫停]**** 圖示。

完整範例

請參閱使用 WinJS 的應用程式啟用和暫停範例以及使用 WRL 的應用程式啟用、繼續及暫停範例,以取得可顯示如何處理應用程式週期事件的完整程式碼範例。

相關主題

工作

如何啟用應用程式

如何繼續應用程式

概念

應用程式週期

指導方針

應用程式暫停和繼續的指導方針

參考

WinJS.Application.checkpoint

WinJS.Application.sessionState