iOS程序的五種狀態(tài),AppDelegate中的回調方法和通知

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ā)送任何通知。

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容