【轉】深刻淺出 iOS 之生命週期

[iOS]深刻淺出 iOS 之生命週期

深刻淺出 iOS 之生命週期  http://blog.csdn.net/kesalin/article/details/6691766ios

羅朝輝(http://blog.csdn.net/kesalin) 多線程

轉載請註明出處 app

iOS應用程序的生命週期相比 Android 應用程序的生命週期來講,沒那麼簡明易懂,可是也並不複雜。iOS應用程序的生命週期又根據系統是否支持多線程分爲兩種:
不支持多線程的iOS4以前的系統以及支持多線程的iOS4及其以後的系統。

iOS4 以前系統,app的生命週期圖以下所示:
感謝 oliver@drobnik.com 提供如錯詳細的圖,並以cc許可發佈。url

從圖中咱們能夠看出: step 1,點擊 app icon 或者從應用程序url(好比在Safari地址欄中輸入應用程序url)啓動應用程序。spa


step 2,就會進入 UIApplicationDelegate 的
- (void)applicationDidFinishLaunching:(UIApplication *)application;
或 
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions;

step 3, 若是是從 url 啓動的則先進入 UIApplicationDelegate 的
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url;
而後再跳轉到step 4;不然直接跳轉到step 4;

step 4,進入 UIApplicationDelegate 的
- (void)applicationDidBecomeActive:(UIApplication *)application;

step 5,進入應用程序主循環,這時應用程序已是活動的了,用戶能夠與應用程序交互。

step 6,在 step 5 狀態下,若是按住 home 鍵或者進行任務切換操做,而後跳轉到 step 8;

step 7,在 step 5 狀態下,應用程序被中斷(如來電,來短信),進入 UIApplicationDelegate 的
- (void)applicationWillResignActive:(UIApplication *)application;
若是用戶選擇不處理繼續留在當前應用程序,則回到 step 4;若是用戶選擇處理,則跳轉到 step 8;

step 8,進入 UIApplicationDelegate 的
- (void)applicationWillTerminate:(UIApplication *)application;
當前應用程序關閉。

注:這裏所說的進入,並不是真正的調用該消息,只是走流程。由於 UIApplicationDelegate 的方法都是@optional的,實現了則真正執行,沒有實現則什麼也不作。.net

 

iOS4 及其以後的系統,app的生命週期圖以下所示:線程

感謝 oliver@drobnik.com 提供如錯詳細的圖,並以cc許可發佈。blog

從圖中咱們能夠看出,支持多線程以後,狀況要複雜得多了。但整體仍是有規律可循的,多了一個後臺模式。
在app被中斷以後,先進入後臺:
- (void)applicationDidEnterBackground:(UIApplication *)application;
在app被中斷後繼續時,要從後臺模式切換到前臺:
- (void)applicationWillEnterForeground:(UIApplication *)application;

注意:iOS3.2 下構建的 app 也會進入applicationDidEnterBackground:,而後立馬就關閉掉了。而iOS4.x 下構建的 app,進入applicationDidEnterBackground:後,不會立馬關閉掉,而是留在後臺狀態。在後臺狀態下,不管你是經過點擊 app icon仍是任務切換回到前臺,首先進入的是 applicationWillEnterForeground,而後纔是 applicationDidBecomeActive。

當系統內存不足時,系統會強行關閉那些尚在內存中但處於後臺狀態的 app,以騰出足夠的內存供使用。可是那些被強行關閉的程序不會調用任何UIApplicationDelegate的委託方法,只會獲得一個KILL 信號。當咱們長按app icon,強行關閉app,也是一樣的處理過程。

在iOS4及以後的系統中,在app運行過程當中接電話/查看短信,應用程序不會被關閉,它會進入後臺模式。咱們能夠雙擊 home 鍵查看全部當前運行着的應用程序。生命週期

相關文章
相關標籤/搜索