iOS App生命周期初識(shí)

面對(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)系作者
  • 序言:七十年代末肠槽,一起剝皮案震驚了整個(gè)濱河市左电,隨后出現(xiàn)的幾起案子陷遮,更是在濱河造成了極大的恐慌疗韵,老刑警劉巖瓣赂,帶你破解...
    沈念sama閱讀 219,039評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件慧域,死亡現(xiàn)場(chǎng)離奇詭異鲤竹,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)昔榴,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,426評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門辛藻,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人互订,你說(shuō)我怎么就攤上這事吱肌。” “怎么了仰禽?”我有些...
    開(kāi)封第一講書人閱讀 165,417評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵氮墨,是天一觀的道長(zhǎng)纺蛆。 經(jīng)常有香客問(wèn)我,道長(zhǎng)规揪,這世上最難降的妖魔是什么桥氏? 我笑而不...
    開(kāi)封第一講書人閱讀 58,868評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮猛铅,結(jié)果婚禮上字支,老公的妹妹穿的比我還像新娘。我一直安慰自己奸忽,他們只是感情好堕伪,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,892評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著栗菜,像睡著了一般刃跛。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上苛萎,一...
    開(kāi)封第一講書人閱讀 51,692評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音检号,去河邊找鬼腌歉。 笑死,一個(gè)胖子當(dāng)著我的面吹牛齐苛,可吹牛的內(nèi)容都是我干的翘盖。 我是一名探鬼主播,決...
    沈念sama閱讀 40,416評(píng)論 3 419
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼凹蜂,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼馍驯!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起玛痊,我...
    開(kāi)封第一講書人閱讀 39,326評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤汰瘫,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后擂煞,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體混弥,經(jīng)...
    沈念sama閱讀 45,782評(píng)論 1 316
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,957評(píng)論 3 337
  • 正文 我和宋清朗相戀三年对省,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了蝗拿。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,102評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡蒿涎,死狀恐怖哀托,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情劳秋,我是刑警寧澤仓手,帶...
    沈念sama閱讀 35,790評(píng)論 5 346
  • 正文 年R本政府宣布胖齐,位于F島的核電站,受9級(jí)特大地震影響俗或,放射性物質(zhì)發(fā)生泄漏市怎。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,442評(píng)論 3 331
  • 文/蒙蒙 一辛慰、第九天 我趴在偏房一處隱蔽的房頂上張望区匠。 院中可真熱鬧,春花似錦帅腌、人聲如沸驰弄。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,996評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)戚篙。三九已至,卻和暖如春溺职,著一層夾襖步出監(jiān)牢的瞬間岔擂,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,113評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工浪耘, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留乱灵,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,332評(píng)論 3 373
  • 正文 我出身青樓七冲,卻偏偏與公主長(zhǎng)得像痛倚,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子澜躺,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,044評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • 面對(duì)每次打開(kāi)iOS應(yīng)用時(shí).都是否想到過(guò)其App運(yùn)行過(guò)程:從啟動(dòng)到按Home鍵回到主屏幕,從運(yùn)行中到按兩下Home鍵...
    Keizo閱讀 3,786評(píng)論 0 4
  • 1. 啟動(dòng)流程 1.1 準(zhǔn)備知識(shí) Mach-O Apple的操作系統(tǒng)的可執(zhí)行文件格式幾乎都是mach-o蝉稳,mach...
    我有小尾巴快看閱讀 3,204評(píng)論 1 37
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,167評(píng)論 25 707
  • 2017.2.27 爺爺做好飯后便躺在床上看電視,叫他吃飯他說(shuō)不餓掘鄙,奶奶讓我去問(wèn)問(wèn)爺爺怎么了耘戚,是不是不舒服,爺爺回...
    一木5200閱讀 378評(píng)論 0 0
  • 作者:魏浩征朋截,勞達(dá)管理咨詢公司/勞達(dá)律師事務(wù)所創(chuàng)始人、首席顧問(wèn) █近日吧黄,劉強(qiáng)東在講話中談到的京東如何管好七萬(wàn)五千多...
    三毛小朋友閱讀 101評(píng)論 0 0