iOS中的程序的五種狀態(tài)
1、程序的五種狀態(tài)
Not Running:未運(yùn)行。
Inactive:前臺(tái)非活動(dòng)狀態(tài)。處于前臺(tái),但是不能接受事件處理。
Active:前臺(tái)活動(dòng)狀態(tài)。處于前臺(tái),能接受事件處理。
Background:后臺(tái)狀態(tài)。進(jìn)入后臺(tái),如果又可執(zhí)行代碼,會(huì)執(zhí)行代碼,代碼執(zhí)行完畢,程序進(jìn)行掛起。
Suspended:掛起狀態(tài)。進(jìn)入后臺(tái),不能執(zhí)行代碼,如果內(nèi)存不足,程序會(huì)被殺死。
3、AppDelegate中的回調(diào)方法和通知
(1)回調(diào)方法:application:didFinishLaunchingWithOptions:
本地通知:UIApplicationDidFinishLaunchingNotification
觸發(fā)時(shí)機(jī):程序啟動(dòng)并進(jìn)行初始化的時(shí)候后。
適宜操作:這個(gè)階段應(yīng)該進(jìn)行根視圖的創(chuàng)建。
(2)回調(diào)方法:applicationDidBecomeActive:
本地通知:UIApplicationDidBecomeActiveNotification
觸發(fā)時(shí)機(jī):程序進(jìn)入前臺(tái)并處于活動(dòng)狀態(tài)時(shí)調(diào)用。
適宜操作:這個(gè)階段應(yīng)該恢復(fù)UI狀態(tài)(例如游戲狀態(tài))。
(3)回調(diào)方法:applicationWillResignActive:
本地通知:UIApplicationWillResignActiveNotification
觸發(fā)時(shí)機(jī):從活動(dòng)狀態(tài)進(jìn)入非活動(dòng)狀態(tài)。
適宜操作:這個(gè)階段應(yīng)該保存UI狀態(tài)(例如游戲狀態(tài))。
(4)回調(diào)方法:applicationDidEnterBackground:
本地通知:UIApplicationDidEnterBackgroundNotification
觸發(fā)時(shí)機(jī):程序進(jìn)入后臺(tái)時(shí)調(diào)用。
適宜操作:這個(gè)階段應(yīng)該保存用戶數(shù)據(jù),釋放一些資源(例如釋放數(shù)據(jù)庫資源)。
(5)回調(diào)方法:applicationWillEnterForeground:
本地通知:UIApplicationWillEnterForegroundNotification
觸發(fā)時(shí)機(jī):程序進(jìn)入前臺(tái),但是還沒有處于活動(dòng)狀態(tài)時(shí)調(diào)用。
適宜操作:這個(gè)階段應(yīng)該恢復(fù)用戶數(shù)據(jù)。
(6)回調(diào)方法:applicationWillTerminate:
本地通知:UIApplicationWillTerminateNotification
觸發(fā)時(shí)機(jī):程序被殺死時(shí)調(diào)用。
適宜操作:這個(gè)階段應(yīng)該進(jìn)行釋放一些資源和保存用戶數(shù)據(jù)。
4、程序啟動(dòng)
點(diǎn)擊應(yīng)用圖標(biāo)時(shí),會(huì)經(jīng)歷三個(gè)狀態(tài):
Not running-->Inactive-->Active
Not running --> Inactive
調(diào)用 application:didFinishLaunchingWithOptions: 發(fā)送:UIApplicationDidFinishLaunchingNotification
Inactive-->Active
調(diào)用 applicationDidBecomeActive: 發(fā)送:UIApplicationDidBecomeActiveNotification
5、程序Home
根據(jù)info.plist中Application does not run in background? /? UIApplicationExitsOnSuspend控制似乎否可以在后臺(tái)運(yùn)行或掛起。
如果可以在后臺(tái)運(yùn)行或者掛起會(huì)經(jīng)歷
Active-->Inactive-->Background-->Suspended
Active-->Inactive
調(diào)用 applicationWillResignActive: 發(fā)送:UIApplicationWillResignActiveNotification
Background-->Suspended
調(diào)用 applicationDidEnterBackground: 發(fā)送:UIApplicationDidEnterBackgroundNotification
如果不可以后臺(tái)運(yùn)行或掛起會(huì)經(jīng)歷
Active-->Inactive-->Background-->Suspended-->Not Running
Background-->Suspended
調(diào)用 applicationDidEnterBackground: 發(fā)送:UIApplicationDidEnterBackgroundNotification
Suspended-->Not Running
調(diào)用 applicationWillTerminate: 發(fā)送:UIApplicationWillTerminateNotification
6、掛起后,重新運(yùn)行
Suspended-->Background-->Inactive-->Active
Background-->Inactive
調(diào)用 applicationWillEnterForeground: 發(fā)送:UIApplicationWillEnterForegroundNotification
Inactive-->Active
調(diào)用 applicationDidBecomeActive: 發(fā)送:UIApplicationDidBecomeActiveNotification
7、內(nèi)存不足,殺死程序
Background-->Suspended-->Not running
這種情況不會(huì)調(diào)用任何方法,也不會(huì)發(fā)送任何通知。