iOS APP生命周期

面對(duì)每次打開(kāi)iOS應(yīng)用時(shí).都是否想到過(guò)其App運(yùn)行過(guò)程:從啟動(dòng)到按Home鍵回到主屏幕,從運(yùn)行中到按兩下Home鍵進(jìn)入任務(wù)管理界面,甚至iOS9后支持多任務(wù)的iPad當(dāng)兩個(gè)App出現(xiàn)在同一屏幕上,這幾個(gè)情況App所處于什么狀態(tài).其過(guò)渡中又在進(jìn)行怎樣的狀態(tài)切換呢,Let's get it !!! ??

App狀態(tài)變化的歷史

iOS4之前的App時(shí)代,整個(gè)界面只允許一個(gè)App處于運(yùn)行狀態(tài),而當(dāng)某個(gè)App處于運(yùn)行狀態(tài)時(shí)意味著其他所有的App的活動(dòng)都被終止并退出,無(wú)法接受任何事件.一個(gè)應(yīng)用的狀態(tài)轉(zhuǎn)換只有運(yùn)行、退出之間的變換.在iOS4之后的iPhone進(jìn)入了多任務(wù)處理時(shí)代.也意味了當(dāng)從一個(gè)應(yīng)用切換到另一個(gè)應(yīng)用時(shí),系統(tǒng)不會(huì)馬上將原來(lái)的應(yīng)用終止退出,將其狀態(tài)變成了suspend,而另一個(gè)應(yīng)用的狀態(tài)變成了running.

AppDelegate

運(yùn)行一個(gè)App,應(yīng)用程序會(huì)自動(dòng)創(chuàng)建UIApplication單例對(duì)象,并用于引用著,其UIApplicaiton實(shí)例的delegate被賦值為AppDelegate實(shí)例對(duì)象,其也是一個(gè)單例,也永遠(yuǎn)不會(huì)被釋放直到該App退出.而AppDelegate對(duì)象有著一系列在程序啟動(dòng)時(shí)的跟蹤狀態(tài)變化,處理從其他應(yīng)用跳轉(zhuǎn)、啟動(dòng)到此應(yīng)用,或者后臺(tái)運(yùn)行代碼的方法.以下是AppDelegate做為App的根對(duì)象的主要功能:

  1. 運(yùn)行在啟動(dòng)時(shí)自己用來(lái)初始化應(yīng)用的特點(diǎn)代碼.
  2. 響應(yīng)App從啟動(dòng),到后臺(tái),到前臺(tái),到退出時(shí)各個(gè)狀態(tài)時(shí)的指定方法.
  3. 負(fù)責(zé)處理接收推送通知或本地通知啟動(dòng)App的情況,處理手機(jī)低內(nèi)存警告時(shí)的情況.
  4. 負(fù)責(zé)處理應(yīng)用程序的狀態(tài)保存和恢復(fù).
  5. 響應(yīng)由App處理的事件,而是指定控制器或視圖.
  6. 處理數(shù)據(jù)的存儲(chǔ).

App狀態(tài)的代理事件

新建一個(gè)Signle View Application后,系統(tǒng)會(huì)自動(dòng)創(chuàng)建AppDelegate文件,系統(tǒng)默認(rèn)提供的方法表示了App不同的運(yùn)行狀態(tài).

  • application:willFinishLaunchingWithOptions
    在App啟動(dòng)時(shí)調(diào)用表示應(yīng)用加載進(jìn)程已經(jīng)開(kāi)始,常用來(lái)處理應(yīng)用狀態(tài)的存儲(chǔ)和恢復(fù)
  • application:didFinishLaunchingWithOptions
    表示App將從未運(yùn)行狀態(tài)進(jìn)入運(yùn)行狀態(tài),用于對(duì)App的初始化操作.
  • applicationDidBecomeActive
    application:didFinishLaunchingWithOptions:之后調(diào)用,表示應(yīng)用進(jìn)入active狀態(tài),在applicationWillResignActive調(diào)用后App又回到active狀態(tài)時(shí)也會(huì)調(diào)用.
  • applicationWillResignActive
    當(dāng)某一操作阻塞App界面時(shí)會(huì)調(diào)用,如按Home鍵回到鍵入主界面,劃出通知欄或者設(shè)置,臨時(shí)的電話和通知,支持多任務(wù)的iPad進(jìn)行側(cè)邊欄滑動(dòng)時(shí)等情況下都會(huì)調(diào)用,使得App進(jìn)入inavtive狀態(tài),往往操作結(jié)束后會(huì)調(diào)用applicationDidBecomeActive,使得App回到active狀態(tài).
  • applicationDidEnterBackground
    在App進(jìn)入后臺(tái)后調(diào)用,之前肯定會(huì)調(diào)用applicationWillResignActive方法.允許執(zhí)行短時(shí)間 的任務(wù)代碼如清理內(nèi)存
  • applicationWillEnterForeground
    當(dāng)App將從后臺(tái)回到前臺(tái)時(shí)調(diào)用,之后肯定調(diào)用applicationDidBecomeActive方法表示程序進(jìn)入active狀態(tài),但App第一次啟動(dòng)時(shí)不是從后臺(tái)啟動(dòng),所以首次加載時(shí)不會(huì)調(diào)用此方法.
  • applicationWillTerminate
    當(dāng)App將要被系統(tǒng)殺死時(shí)調(diào)用,通常用來(lái)對(duì)App進(jìn)行清理工作,釋放資源,保存數(shù)據(jù)等等,所執(zhí)行的操作官方推薦最多耗時(shí)5s左右的事件來(lái)完成和返回,若時(shí)間過(guò)長(zhǎng)系統(tǒng)殺死應(yīng)用時(shí)會(huì)將使操作失敗.其調(diào)用時(shí)機(jī)比較特殊,如果運(yùn)行的App直接退出(非進(jìn)入后臺(tái)),會(huì)調(diào)用;若應(yīng)用是從中斷狀態(tài)(此狀態(tài)期間App無(wú)法接收任何事件)被系統(tǒng)退出,則不會(huì)被調(diào)用.

注意點(diǎn)

iOS8中,App會(huì)在根控制器初始化后調(diào)用viewDidAppear方法之后才會(huì)調(diào)用applicationDidBecomeActive,對(duì)于App啟動(dòng)的事件順序?yàn)?/p>

application:didFinishLaunchingWithOptions:
??
viewDidLoad
??
viewWillAppear
??
viewDidAppear
??
applicationDidBecomeActive

而在iOS7和9中,App在調(diào)用applicationDidBecomeActive方法后才會(huì)調(diào)用根控制器的viewDidAppear,其調(diào)用順序?yàn)?/p>

application:didFinishLaunchingWithOptions:
??
viewDidLoad
??
viewWillAppear
??
applicationDidBecomeActive
??
viewDidAppear

在這兩情況下如果要對(duì)UIApplicationDidBecomeActiveNotification進(jìn)行通知注冊(cè)時(shí)就需要考慮其iOS的兼容性,否則就會(huì)出現(xiàn)問(wèn)題了.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 面對(duì)每次打開(kāi)iOS應(yīng)用時(shí).都是否想到過(guò)其App運(yùn)行過(guò)程:從啟動(dòng)到按Home鍵回到主屏幕,從運(yùn)行中到按兩下Home鍵...
    One9398閱讀 4,140評(píng)論 0 5
  • 所謂生命周期,其實(shí)就是指從App啟動(dòng)到關(guān)閉這一過(guò)程中所發(fā)生的一系列事件。由于iOS 4中引入了多任務(wù)功能,App能...
    山楊閱讀 922評(píng)論 0 2
  • iOS App的生命周期 增加自己對(duì)iOS聲明周期理解,轉(zhuǎn)載自,Apple App Cycle 一個(gè)項(xiàng)目默認(rèn)會(huì)有一...
    滄州寧少閱讀 252評(píng)論 0 0
  • 一、iOS app 程序執(zhí)行過(guò)程 1、執(zhí)行main函數(shù)2、在此方法中調(diào)用UIApplicationMain2.1 ...
    liuyihua的技術(shù)修煉場(chǎng)閱讀 9,810評(píng)論 0 16
  • 營(yíng)銷人的工作中總少不了一本記錄營(yíng)銷的備忘錄——其中有讓人茅塞頓開(kāi)的營(yíng)銷觀點(diǎn)、一語(yǔ)中的的營(yíng)銷感悟、永不過(guò)時(shí)的金玉良言...
    媒界平臺(tái)閱讀 220評(píng)論 0 1

友情鏈接更多精彩內(nèi)容