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