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