共用方式為


iOS 中的背景處理簡介

iOS 會非常嚴格地規範背景處理,並提供三種方法來實作它:

  • 註冊背景工作 - 如果應用程式需要完成重要工作,它可以要求 iOS 不要在應用程式移至背景時中斷工作。 例如,應用程式可能需要完成使用者登入,或完成下載大型檔案。
  • 註冊為背景必要應用程式 - 應用程式可以註冊為特定類型的應用程式,其已知、特定背景需求,例如 音訊VoIP外部配件普拉斯位置 。 只要這些應用程式正在執行已註冊應用程式類型參數內的工作,這些應用程式就會允許連續的背景處理許可權。
  • 啟用背景 更新 - 應用程式可以使用區域監視或接聽重大位置變更來觸發背景更新。 從 iOS 7 開始,應用程式也可以使用背景擷取遠端通知來註冊以更新背景內容。

應用程式狀態和應用程式委派方法

在深入探討 iOS 中背景處理的程式代碼之前,我們必須瞭解背景處理如何影響 iOS 應用程式的生命週期。

iOS 應用程式生命週期是應用程式狀態和方法的集合,可用於在它們之間移動。 應用程式會根據使用者的行為和應用程式的背景需求,在狀態之間轉換。 下圖說明此動作:

Application States and Application Delegate Methods diagram

  • 未執行 - 應用程式尚未在裝置上啟動。
  • 執行/作用 中 - 應用程式位於畫面上,且正在前景執行程序代碼。
  • 非使用 中 - 應用程式會因來電、簡訊或其他中斷而中斷。
  • Backgrounded - 應用程式會移至背景,並繼續執行背景程序代碼。
  • 已暫停 - 如果應用程式沒有任何程式碼可在背景中執行,或如果所有程式代碼都已完成,則應用程式將會由 OS 暫停。 暫停的應用程式進程會保持運作,但應用程式無法執行處於此狀態的任何程序代碼。
  • 返回 [未執行/終止]- 偶爾會終結應用程式的進程,而應用程式會回到 [未執行 中] 狀態。 這會在記憶體不足的情況下發生,或使用者手動終止應用程式的情況。

由於引進多任務支援,iOS 很少終止閑置的應用程式,而是將其進程 保留在記憶體中暫止 。 讓應用程式的進程保持運作,可確保應用程式下次使用者開啟應用程式時會快速啟動。 這也表示應用程式可以自由地從 暫停 狀態移回 背景 狀態,而不需要繪製系統資源。 iOS 7 利用新的 API 利用這項功能,讓應用程式能夠在裝置進入睡眠時暫停背景工作、直接從背景更新內容,而不需用戶互動等等。 我們將涵蓋 iOS 背景技術中的新 API。

應用程式生命週期方法

當應用程式變更狀態時,iOS 會透過 類別中的 AppDelegate 事件方法通知應用程式:

  • OnActivated - 這是在第一次啟動應用程式時呼叫,每次應用程式回到前景時都會呼叫。 這是放置每次開啟應用程式時需要執行之程序代碼的位置。
  • OnResignActivation - 如果使用者收到如簡訊或電話等中斷,就會呼叫這個方法,並暫時停用應用程式。 如果使用者接受電話,應用程式將會傳送到背景。
  • DidEnterBackground - 當應用程式進入背景狀態時呼叫,這個方法會為應用程式提供大約五秒的時間來準備可能的終止。 使用此時間儲存用戶數據和工作,並從畫面中移除敏感性資訊。
  • WillEnterForeground - 當使用者傳回背景或暫停的應用程式,並將其啟動至前景時, WillEnterForeground 就會呼叫 。 這是準備應用程式以重新凍結在 期間 DidEnterBackground 儲存的任何狀態來取得前景的時間。 OnActivated 會在此方法完成之後立即呼叫。
  • WillTerminate - 應用程式已關閉,且其進程已終結。 只有在裝置或 OS 版本無法使用多任務時、記憶體不足或使用者手動終止背景應用程式時,才會呼叫這個方法。 請注意,終止的暫停應用程式不會呼叫 WillTerminate

下圖說明應用程式狀態和生命週期方法如何結合在一起:

This diagram illustrates how the application states and lifecycle methods fit together

iOS 中背景的使用者控制件

iOS 7 引進了數項功能,可讓使用者更充分掌控應用程式的背景狀態。 [應用程式切換器] 和 [背景應用程式重新整理] 設定都會影響應用程式生命週期。

應用程式切換器

應用程式切換器是iOS 7中引進的重要控制項功能。 其啟動方式是按兩下 [首頁 ] 按鈕,並顯示其進程為運作的應用程式:

Moving between apps using the App Switcher

使用應用程式切換器,使用者可以捲動所有背景和暫停應用程式的快照集。 點選應用程式會將它啟動至前景。 撥動會從背景移除應用程式,並終止其進程。 我們將在下一節的 iOS 應用程式生命週期示範 中深入瞭解應用程式切換器。

重要

應用程式切換器不會顯示背景和暫停應用程式之間的差異。

背景應用程式重新整理 設定

iOS 7 可讓使用者退出宣告註冊背景處理之應用程式的背景,藉此提高使用者對應用程式生命週期的控制。 這不會防止應用程式執行背景工作

用戶可以流覽至 設定 [一般>背景應用程式重新整理] 並編輯所選應用程式的背景許可權,>以變更此設定。 如果背景應用程式重新整理設定為關閉,應用程式會在進入背景時立即暫停,並防止執行任何背景處理:

Background App Refresh Settings

開發人員可以使用 API 檢查背景重新整理應用程式狀態 BackgroundRefreshStatus 。 如需範例,請參閱 檢查背景重新整理設定配方

我們已涵蓋 iOS 應用程式生命週期的基本概念,以及控制應用程式生命週期的功能。 接下來,讓我們看看 iOS 應用程式生命周期的運作情形。