iOS 中的背景處理簡介
iOS 會非常嚴格地規範背景處理,並提供三種方法來實作它:
- 註冊背景工作 - 如果應用程式需要完成重要工作,它可以要求 iOS 不要在應用程式移至背景時中斷工作。 例如,應用程式可能需要完成使用者登入,或完成下載大型檔案。
- 註冊為背景必要應用程式 - 應用程式可以註冊為特定類型的應用程式,其已知、特定背景需求,例如 音訊 、 VoIP 、 外部配件 、 普拉斯 和 位置 。 只要這些應用程式正在執行已註冊應用程式類型參數內的工作,這些應用程式就會允許連續的背景處理許可權。
- 啟用背景 更新 - 應用程式可以使用區域監視或接聽重大位置變更來觸發背景更新。 從 iOS 7 開始,應用程式也可以使用背景擷取或遠端通知來註冊以更新背景內容。
應用程式狀態和應用程式委派方法
在深入探討 iOS 中背景處理的程式代碼之前,我們必須瞭解背景處理如何影響 iOS 應用程式的生命週期。
iOS 應用程式生命週期是應用程式狀態和方法的集合,可用於在它們之間移動。 應用程式會根據使用者的行為和應用程式的背景需求,在狀態之間轉換。 下圖說明此動作:
- 未執行 - 應用程式尚未在裝置上啟動。
- 執行/作用 中 - 應用程式位於畫面上,且正在前景執行程序代碼。
- 非使用 中 - 應用程式會因來電、簡訊或其他中斷而中斷。
- Backgrounded - 應用程式會移至背景,並繼續執行背景程序代碼。
- 已暫停 - 如果應用程式沒有任何程式碼可在背景中執行,或如果所有程式代碼都已完成,則應用程式將會由 OS 暫停。 暫停的應用程式進程會保持運作,但應用程式無法執行處於此狀態的任何程序代碼。
- 返回 [未執行/終止]- 偶爾會終結應用程式的進程,而應用程式會回到 [未執行 中] 狀態。 這會在記憶體不足的情況下發生,或使用者手動終止應用程式的情況。
由於引進多任務支援,iOS 很少終止閑置的應用程式,而是將其進程 保留在記憶體中暫止 。 讓應用程式的進程保持運作,可確保應用程式下次使用者開啟應用程式時會快速啟動。 這也表示應用程式可以自由地從 暫停 狀態移回 背景 狀態,而不需要繪製系統資源。 iOS 7 利用新的 API 利用這項功能,讓應用程式能夠在裝置進入睡眠時暫停背景工作、直接從背景更新內容,而不需用戶互動等等。 我們將涵蓋 iOS 背景技術中的新 API。
應用程式生命週期方法
當應用程式變更狀態時,iOS 會透過 類別中的 AppDelegate
事件方法通知應用程式:
OnActivated
- 這是在第一次啟動應用程式時呼叫,每次應用程式回到前景時都會呼叫。 這是放置每次開啟應用程式時需要執行之程序代碼的位置。OnResignActivation
- 如果使用者收到如簡訊或電話等中斷,就會呼叫這個方法,並暫時停用應用程式。 如果使用者接受電話,應用程式將會傳送到背景。DidEnterBackground
- 當應用程式進入背景狀態時呼叫,這個方法會為應用程式提供大約五秒的時間來準備可能的終止。 使用此時間儲存用戶數據和工作,並從畫面中移除敏感性資訊。WillEnterForeground
- 當使用者傳回背景或暫停的應用程式,並將其啟動至前景時,WillEnterForeground
就會呼叫 。 這是準備應用程式以重新凍結在 期間DidEnterBackground
儲存的任何狀態來取得前景的時間。OnActivated
會在此方法完成之後立即呼叫。WillTerminate
- 應用程式已關閉,且其進程已終結。 只有在裝置或 OS 版本無法使用多任務時、記憶體不足或使用者手動終止背景應用程式時,才會呼叫這個方法。 請注意,終止的暫停應用程式不會呼叫WillTerminate
。
下圖說明應用程式狀態和生命週期方法如何結合在一起:
iOS 中背景的使用者控制件
iOS 7 引進了數項功能,可讓使用者更充分掌控應用程式的背景狀態。 [應用程式切換器] 和 [背景應用程式重新整理] 設定都會影響應用程式生命週期。
應用程式切換器
應用程式切換器是iOS 7中引進的重要控制項功能。 其啟動方式是按兩下 [首頁 ] 按鈕,並顯示其進程為運作的應用程式:
使用應用程式切換器,使用者可以捲動所有背景和暫停應用程式的快照集。 點選應用程式會將它啟動至前景。 撥動會從背景移除應用程式,並終止其進程。 我們將在下一節的 iOS 應用程式生命週期示範 中深入瞭解應用程式切換器。
重要
應用程式切換器不會顯示背景和暫停應用程式之間的差異。
背景應用程式重新整理 設定
iOS 7 可讓使用者退出宣告註冊背景處理之應用程式的背景,藉此提高使用者對應用程式生命週期的控制。 這不會防止應用程式執行背景工作。
用戶可以流覽至 設定 [一般>背景應用程式重新整理] 並編輯所選應用程式的背景許可權,>以變更此設定。 如果背景應用程式重新整理設定為關閉,應用程式會在進入背景時立即暫停,並防止執行任何背景處理:
開發人員可以使用 API 檢查背景重新整理應用程式狀態 BackgroundRefreshStatus
。 如需範例,請參閱 檢查背景重新整理設定配方。
我們已涵蓋 iOS 應用程式生命週期的基本概念,以及控制應用程式生命週期的功能。 接下來,讓我們看看 iOS 應用程式生命周期的運作情形。