iOS appDelegate 生命周期
2012-11-20 16:11 2942人閱讀 評論(0) 收藏 舉報
◆- (void)applicationWillResignActive:(UIApplication *)application
說明:當應用程序將要入非活動狀態執行,在此期間,應用程序不接收消息或事件,比如來電話了
◆- (void)applicationDidBecomeActive:(UIApplication *)application
說明:當應用程序入活動狀態執行,這個剛好跟上面那個方法相反
◆- (void)applicationDidEnterBackground:(UIApplication *)application
說明:當程序被推送到后臺的時候調用。所以要設置后臺繼續運行,則在這個函數里面設置即可
◆- (void)applicationWillEnterForeground:(UIApplication *)application
說明:當程序從后臺將要重新回到前臺時候調用,這個剛好跟上面的那個方法相反。
◆- (void)applicationWillTerminate:(UIApplication *)application
說明:當程序將要退出是被調用,通常是用來保存數據和一些退出前的清理工作。這個需要要設置UIApplicationExitsOnSuspend的鍵值。
◆- (void)applicationDidReceiveMemoryWarning:(UIApplication *)application
說明:iPhone設備只有有限的內存,如果為應用程序分配了太多內存操作系統會終止應用程序的運行,在終止前會執行這個方法,通常可以在這里進行內存清理工作防止程序被終止
◆- (void)applicationSignificantTimeChange:(UIApplication*)application
說明:當系統時間發生改變時執行
◆- (void)applicationDidFinishLaunching:(UIApplication*)application
說明:當程序載入后執行
◆- (void)application:(UIApplication)application willChangeStatusBarFrame:(CGRect)newStatusBarFrame
說明:當StatusBar框將要變化時執行
◆- (void)application:(UIApplication*)application willChangeStatusBarOrientation:
(UIInterfaceOrientation)newStatusBarOrientation
duration:(NSTimeInterval)duration
說明:當StatusBar框方向將要變化時執行
◆- (BOOL)application:(UIApplication)application handleOpenURL:(NSURL)url
說明:當通過url執行
◆- (void)application:(UIApplication*)application didChangeStatusBarOrientation:(UIInterfaceOrientation)oldStatusBarOrientation
說明:當StatusBar框方向變化完成后執行
◆- (void)application:(UIApplication*)application didChangeSetStatusBarFrame:(CGRect)oldStatusBarFrame
說明:當StatusBar框變化完成后執行
下圖是我總結的一個大概流程圖,不是很準確但是基本上也說明了整個過程,僅供參考。
UIApplication狀態轉換的Delegate消息編號如下:
application:didFinishLaunchingWithOptions:
application:openURL:sourceApplication:annotation:
applicationDidBecomeActive:
applicationWillResignActive:
applicationDidEnterBackground:
applicationWillEnterForeground:
applicationWillTerminate:
則對于下面各種操作Delegate消息的發送順序為
通過SpringBoard第一次啟動,消息順序為1-3
通過URL第一次啟動,消息順序為1-2-3
運行過程中按Home鍵,消息順序為 4-5
若為iOS4.0以下或者Info.plist中設置了UIApplicationExitsOnSuspend,則繼續發送消息
7,然后程序終止;
否則根據程序設置進入Background運行模式或者Suspend狀態。
運行過程中按鎖屏鍵,消息順序與按Home鍵相同,區別在于此時會關閉所有網絡連接(iOS5.0+)
運行過程中被短信/電話等中斷,則發送消息 4
若用戶選擇短信/電話,則發送消息 5,后續流程與按Home鍵相同。
若用戶忽略短信/電話,則發送消息 3,回到Foreground運行狀態。
運行過程中雙擊Home鍵顯示任務切換器,會發送消息 4
若選擇其他程序或者單擊Home鍵返回到SpringBoard,則發送消息 5,后續流程與按Home鍵相同。
若再次雙擊Home鍵返回APP,則發送消息 3,回到Foreground運行狀態。
通過SpringBoard或者任務切換器再次啟動時,消息順序為6-3.
從后臺重新返回前臺的轉換過程中,即6與3消息的中間,在5.1的模擬器中顯示的是Default.png,但在真實設備上顯示的進入后臺的screenshot。
通過URL再次啟動時,消息順序6-2-3.
程序在Background/Suspend狀態時,用戶雙擊Home鍵,在任務切換器中刪除此程序時,APP會立即終止,不會有任何消息發送。
當程序在Suspend狀態時,若內存緊張,系統也會將程序立即終止以回收內存,此時也不會有任何消息發送。