iOS app的生命周期

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

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

application:willFinishLaunchingWithOptions

在App啟動時調用表示應用加載進程已經開始,常用來處理應用狀態(tài)的存儲和恢復

application:didFinishLaunchingWithOptions

表示App將從未運行狀態(tài)進入運行狀態(tài),用于對App的初始化操作.

applicationDidBecomeActive

在application:didFinishLaunchingWithOptions:之后調用,表示應用進入active狀態(tài),在applicationWillResignActive調用后App又回到active狀態(tài)時也會調用.

applicationWillResignActive

當某一操作阻塞App界面時會調用,如按Home鍵回到鍵入主界面,劃出通知欄或者設置,臨時的電話和通知,支持多任務的iPad進行側邊欄滑動時等情況下都會調用,使得App進入inavtive狀態(tài),往往操作結束后會調用applicationDidBecomeActive,使得App回到active狀態(tài).

applicationDidEnterBackground

在App進入后臺后調用,之前肯定會調用applicationWillResignActive方法.允許執(zhí)行短時間 的任務代碼如清理內存

applicationWillEnterForeground

當App將從后臺回到前臺時調用,之后肯定調用applicationDidBecomeActive方法表示程序進入active狀態(tài),但App第一次啟動時不是從后臺啟動,所以首次加載時不會調用此方法.

applicationWillTerminate

當App將要被系統(tǒng)殺死時調用,通常用來對App進行清理工作,釋放資源,保存數據等等,所執(zhí)行的操作官方推薦最多耗時5s左右的事件來完成和返回,若時間過長系統(tǒng)殺死應用時會將使操作失敗.其調用時機比較特殊,如果運行的App直接退出(非進入后臺),會調用;若應用是從中斷狀態(tài)(此狀態(tài)期間App無法接收任何事件)被系統(tǒng)退出,則不會被調用.

注意點

iOS8中,App會在根控制器初始化后調用viewDidAppear方法之后才會調用applicationDidBecomeActive,對于App啟動的事件順序為

application:didFinishLaunchingWithOptions:

??viewDidLoad

??viewWillAppear

??viewDidAppear

??applicationDidBecomeActive

而在iOS7和9中,App在調用applicationDidBecomeActive方法后才會調用根控制器的viewDidAppear,其調用順序為

application:didFinishLaunchingWithOptions:

??viewDidLoad

??viewWillAppear

??applicationDidBecomeActive

??viewDidAppear

iOS應用生命周期

作為應用程序的委托對象,AppDelegate類在應用生命周期的不同階段會回調不同的方法。

下面簡要介紹一下iOS應用的5種狀態(tài):

Not Running(非運行狀態(tài)):應用沒有運行或被系統(tǒng)終止運行覆履;

Inactive(前臺非活躍狀態(tài)):應用正式進入前臺狀態(tài)星掰,但是還沒有接受事件處理;

Active(前臺活躍狀態(tài)):應用進入前臺狀態(tài)木柬,能接受事件并且進行處理;

Background(后臺狀態(tài)):應用進入后臺之后,依然能夠執(zhí)行代碼哗魂。如果有可以執(zhí)行的代碼,就會執(zhí)行辙芍,如果沒有可執(zhí)行的代碼或者將可執(zhí)行的代碼執(zhí)行完畢啡彬,應用會馬上進入掛起狀態(tài);

Suspended(掛起狀態(tài)):被掛起的應用進入一種“休眠”狀態(tài)故硅,不能執(zhí)行任何代碼庶灿。當手機系統(tǒng)內存不足時,應用會被終止吃衅。

方法:- (BOOL)application:(UIApplication*)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions

說明:應用啟動并進行初始化時會調用該方法并發(fā)出通知往踢。這個階段會實例化跟試圖控制器。

本地通知:UIApplicationDidFinishLaunchingNotification

方法:- (void)applicationDidBecomeActive:(UIApplication*)application

說明:應用進入前臺并處于活躍狀態(tài)時調用該方法并發(fā)出通知徘层。這個階段可以恢復UI的狀態(tài)峻呕。

本地通知:UIApplicationDidBecomeActiveNotification

方法:- (void)applicationWillResignActive:(UIApplication*)application

說明:應用從活躍狀態(tài)進入到非活躍狀態(tài)時調用該方法并發(fā)出通知利职。這個階段可以保存UI的狀態(tài)。

本地通知:UIApplicationWillResignActiveNotification

方法:- (void)applicationDidEnterBackground:(UIApplication*)application

說明:應用進入后臺是調用該方法并發(fā)送通知瘦癌。這個階段可以保存用戶數據猪贪,釋放一些數據庫資源等。

本地通知:UIApplicationDidEnterBackgroundNotification

方法:- (void)applicationWillEnterForeground:(UIApplication*)application

說明:應用進入到前臺讯私,但是還沒有處于活躍狀態(tài)是調用該方法并發(fā)出通知热押。這個階段可以恢復用戶數據。

本地通知:UIApplicationWillEnterForegroundNotification

方法:- (void)applicationWillTerminate:(UIApplication*)application

說明:應用被終止時調用該方法并發(fā)出通知斤寇,內存清除時除外桶癣。這個階段會釋放一些資源,也可以保存用戶數據娘锁。

本地通知:UIApplicationWillTerminateNotification

非運行狀態(tài)--應用啟動場景

場景描述:用戶點擊應用圖標牙寞,可能是第一次啟動,也可能是應用終止后重新啟動莫秆。共經歷兩個階段3個狀態(tài)间雀。

Not running->Inactive->Active

Not running->Inactive階段。調用application:disFinishLaunchingWithOptions:方法镊屎,發(fā)出UIApplicationDidFinishLaunchingNotification通知雷蹂。

Inactive->Active階段。調用applicationDidBecomeActive:方法杯道,發(fā)出UIApplicationDidBecomeActiveNotification通知匪煌。


點擊Home鍵--應用退出場景

場景描述:應用處于運行狀態(tài)(即Active狀態(tài))時,點擊Home鍵或者有其他的應用導致當前應用終端党巾。

狀態(tài)躍遷過程分兩種情況:

可以在后臺運行或者掛起萎庭;

不可以在后臺運行或者掛起。

對于第一種情況:共經歷3個階段4個狀態(tài)齿拂。

Active->Inactive->Background->Suspended

Active->Inactive階段驳规。調用applicationWillResignActive:方法,發(fā)出UIApplicationWillResignActiveNotification通知署海。

Inactive->Background階段吗购。應用從非活動狀態(tài)進入到后臺。

Background->Suspended階段砸狞。調用applicationDidEnterBackground:方法捻勉,發(fā)出UIApplicationDidEnterBackgroundNotification通知。


對于第二種情況:共經歷4個階段5個狀態(tài)刀森。

Active->Inactive->Background->Suspended->Not running

Active->Inactive階段踱启。應用由活動狀態(tài)轉為非活動狀態(tài)。

Inactive->Background階段。應用從非活動狀態(tài)進入到后臺埠偿。

Background->Suspended階段透罢。調用applicationDidEnterBackground:方法,發(fā)出UIApplicationDidEnterBackgroundNotification通知冠蒋。

Suspended->Not running階段羽圃。調用applicationWillTerminate:方法,發(fā)出UIApplicationWillTerminateNotification通知抖剿。


掛起重新運行場景

場景描述:掛起狀態(tài)的應用重新運行统屈。共經歷3個階段4個狀態(tài)

Suspended->Background->Inactive->Active

Suspended->Background階段牙躺。應用從掛起狀態(tài)進入后臺。

Background->Inactive階段腕扶。調用applicationWillEnterForeground:方法孽拷,發(fā)出UIApplicationWillEnterForegroundNotification通知。

Inactive->Active階段半抱。調用applicationDidBecomeActive:方法脓恕,發(fā)出UIApplicationDidBecomeActiveNotification通知。


方法

本地通知

說明

application:didFinishLaunchingWithOptions:

UIApplicationDidFinishLaunchingNotification

應用啟動并進行初始化時會調用該方法并發(fā)出通知窿侈。這個階段會實例化根視圖控制器

applicationDidBecomeActive:

UIApplicationDidBecomeActiveNotification

應用進入前臺并處于活動狀態(tài)時調用該方法并發(fā)出通知炼幔。這個階段可以恢復UI狀態(tài)(例如游戲狀態(tài))

applicationWillResignActive:

UIApplicationWillResignActiveNotification

應用從活動態(tài)進入非活動態(tài)時調用該方法并發(fā)出通知。這個階段可以保存UI的狀態(tài)(例如游戲狀態(tài))

applicationDidEnterBackground:

UIApplicationDidEnterBackgroundNotification

應用進入后臺時調用該方法并發(fā)出通知史简,這個階段可以保存用戶數據乃秀,釋放一些資源(一些可重新加載的圖片等資源)

applicationWillEnterForeground:

UIApplicationWillEnterForegroundNotification

應用進入前臺,但是還沒有處于活動狀態(tài)時調用該方法并發(fā)出通知圆兵。這個階段可以恢復用戶數據

applicationWillTerminate:

UIApplicationTerminateNotification

應用被終止時調用該方法并發(fā)出通知跺讯。這個階段釋放一些資源,也可以保存用戶數據

iOS的應用程序主要由未運行殉农、未激活刀脏、激活、后臺和掛起這五個狀態(tài)組成超凳,每個狀態(tài)具體的描述如下:

(1)**未運行(Not Running)**:程序未啟動

(2)**未激活(Inactive)**:程序在前臺運行愈污,不過沒有接收到事件。在沒有事件處理情況下程序通常停留在這個狀態(tài)

(3)**激活(Active)**:程序在前臺運行而且接收到了事件,這也是前臺的一個正常的模式

(4)**后臺(Backgroud)**:程序在后臺而且能執(zhí)行代碼轮傍,大多數程序進入這個狀態(tài)后會在這個狀態(tài)上停留一會暂雹。時間到之后會進入掛起狀態(tài)(Suspended)。有的程序經過特殊的請求后可以長期處于Backgroud狀態(tài)

(5)**掛起(Suspended)**:程序在后臺不能執(zhí)行代碼创夜。系統(tǒng)會自動把程序變成這個狀態(tài)而且不會發(fā)出通知擎析。當掛起時,程序還是停留在內存中的,當系統(tǒng)內存低時揍魂,系統(tǒng)就把掛起的程序清除掉桨醋,為前臺程序提供更多的內存。

AppDelegate回調函數

(1)通知進程已啟動但還未進入到狀態(tài)保存

- (BOOL)application:(UIApplication *)application willFinishLaunchingWithOptions:(NSDictionary *)launchOptions

(2)通知啟動完成程序準備開始運行

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

(3)當應用程序將要進入非活動狀態(tài)现斋,在此期間應用程序不接收消息或事件喜最,如電話來了

- (void)applicationWillResignActive:(UIApplication *)application

(4)當應用程序進入到活動狀態(tài)調用

- (void)applicationDidBecomeActive:(UIApplication *)application

(5)當程序進入到后臺時被調用,

- (void)applicationDidEnterBackground:(UIApplication *)application

(6)當應用程序將要從后臺進入到前臺的時候調用

- (void)applicationWillEnterForeground:(UIApplication *)application

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末庄蹋,一起剝皮案震驚了整個濱河市瞬内,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌限书,老刑警劉巖虫蝶,帶你破解...
    沈念sama閱讀 206,839評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異倦西,居然都是意外死亡能真,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評論 2 382
  • 文/潘曉璐 我一進店門扰柠,熙熙樓的掌柜王于貴愁眉苦臉地迎上來粉铐,“玉大人,你說我怎么就攤上這事卤档◎茫” “怎么了?”我有些...
    開封第一講書人閱讀 153,116評論 0 344
  • 文/不壞的土叔 我叫張陵劝枣,是天一觀的道長汤踏。 經常有香客問我,道長舔腾,這世上最難降的妖魔是什么茎活? 我笑而不...
    開封第一講書人閱讀 55,371評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮琢唾,結果婚禮上载荔,老公的妹妹穿的比我還像新娘。我一直安慰自己采桃,他們只是感情好懒熙,可當我...
    茶點故事閱讀 64,384評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著普办,像睡著了一般工扎。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上衔蹲,一...
    開封第一講書人閱讀 49,111評論 1 285
  • 那天肢娘,我揣著相機與錄音呈础,去河邊找鬼。 笑死橱健,一個胖子當著我的面吹牛而钞,可吹牛的內容都是我干的。 我是一名探鬼主播拘荡,決...
    沈念sama閱讀 38,416評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼臼节,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了珊皿?” 一聲冷哼從身側響起网缝,我...
    開封第一講書人閱讀 37,053評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎蟋定,沒想到半個月后粉臊,有當地人在樹林里發(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 43,558評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡驶兜,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,007評論 2 325
  • 正文 我和宋清朗相戀三年扼仲,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片促王。...
    茶點故事閱讀 38,117評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖而晒,靈堂內的尸體忽然破棺而出蝇狼,到底是詐尸還是另有隱情,我是刑警寧澤倡怎,帶...
    沈念sama閱讀 33,756評論 4 324
  • 正文 年R本政府宣布迅耘,位于F島的核電站,受9級特大地震影響监署,放射性物質發(fā)生泄漏颤专。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,324評論 3 307
  • 文/蒙蒙 一钠乏、第九天 我趴在偏房一處隱蔽的房頂上張望栖秕。 院中可真熱鬧,春花似錦晓避、人聲如沸簇捍。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽暑塑。三九已至,卻和暖如春锅必,著一層夾襖步出監(jiān)牢的瞬間事格,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留驹愚,地道東北人远搪。 一個月前我還...
    沈念sama閱讀 45,578評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像么鹤,于是被迫代替她去往敵國和親终娃。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,877評論 2 345