淺談iOS中的程式的五種狀態

weixin_34337265發表於2017-09-29

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
這種情況不會呼叫任何方法,也不會傳送任何通知。

相關文章