iOS應用生命週期

  做爲應用程序的委託對象,AppDelegate類在應用生命週期的不一樣階段會回調不一樣的方法。首先,讓咱們先了解一下iOS 應用的不一樣狀態及它們彼此間的關係,見圖1 。app

                                               

                                                            圖1 iOS應用狀態圖編輯器

  下面簡要介紹一下iOS 應用的5種狀態。
   Not Running(非運行狀態)。應用沒有運行或被系統終止。
   Inactive (前臺非活動狀態)。應用正在進入前臺狀態,可是還不能接受事件處理。
   Active (前臺活動狀態)。應用進入前臺狀態,能接受事件處理。
   Background(後臺狀態)。應用進入後臺後,依然可以執行代碼。若是有可執行的代碼,就會執行代碼,若是沒有可執行的代碼或者將可執行的代碼執行完畢,應用會立刻進入掛起狀態。 
   Suspended(掛起狀態)。處於掛起的應用進入一種「冷凍」狀態,不能執行代碼。若是系統內存不夠,應用會被終止。 
  在應用狀態躍遷的過程當中,iOS 系統會回調AppDelegate中的一些方法,而且發送一些通知。實際上,在應用的生命週期中用到的方法和通知不少,咱們選取了幾個主要的方法和通知進行詳細介紹,具體如表1所述。操作系統

                                                      表1 狀態躍遷過程當中應用回調的方法和本地通知3d

                         

  爲了便於觀察應用程序的運行狀態,咱們爲AppDelegate.m中的方法添加一些日誌輸出,具體代碼以下:日誌

@implementation AppDelegate  
 
- (BOOL)application:(UIApplication *)application  
    didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    NSLog(@"%@", @"application:didFinishLaunchingWithOptions:"); 

    return YES; 
} 
- (void)applicationWillResignActive:(UIApplication *)application 
{     
    NSLog(@"%@", @"applicationWillResignActive:"); 
} 
- (void)applicationDidEnterBackground:(UIApplication *)application 
{     
    NSLog(@"%@", @"applicationDidEnterBackground:"); 
} 
- (void)applicationWillEnterForeground:(UIApplication *)application 
{     
    NSLog(@"%@", @"applicationWillEnterForeground:"); 
} 
- (void)applicationDidBecomeActive:(UIApplication *)application 
{     
    NSLog(@"%@", @"applicationDidBecomeActive:"); 
} 
- (void)applicationWillTerminate:(UIApplication *)application 
{     
    NSLog(@"%@", @"applicationWillTerminate:"); 
} 
@end 

  爲了讓你們更直觀地瞭解各狀態與其相應的方法、通知間的關係,下面咱們以幾個應用場景爲切入點進行系統的分析。對象

(一)非運行狀態——應用啓動場景blog

  場景描述:用戶點擊應用圖標的時候,多是第一次啓動這個應用,也多是應用終止後再次啓動。該場景的狀態躍遷過程見圖2 ,共經歷兩個階段3個狀態:Not running →Inactive→Active。
   在Not running→Inactive 階段。調用application:didFinishLaunchingWithOptions:方法,發出UIApplicationDidFinishLaunchingNotification 通知。 
   在Inactive →Active 階段。調用 applicationDidBecomeActive: 方法,發出UIApplicationDidBecomeActiveNotification 通知。生命週期

                                                

                                                                       圖2 應用啓動場景的狀態躍遷過程 事件

(二)點擊Home鍵——應用退出場景內存

  場景描述:應用處於運行狀態(即Active狀態)時,點擊Home鍵或者有其餘的應用致使當前應用中斷。該場景的狀態躍遷過程能夠分紅兩種狀況:能夠在後臺運行或者掛起,不能夠在後臺運行或者掛起。根據產品屬性文件(如HelloWorld-Info.plist)中的相關屬性Application does not run in background 是與否能夠控制這兩種狀態。若是採用文本編輯器打開HelloWorldInfo.plist文件該設置項對應的鍵是UIApplicationExitsOnSuspend。 

  狀態躍遷的第一種狀況:應用能夠在後臺運行或者掛起,該場景的狀態躍遷過程見圖3 ,共經歷3 個階段4個狀態:Active → Inactive → Background→Suspended。 

   在Active→Inactive 階段。調用 applicationWillResignActive:方法,發出UIApplicationWillResignActiveNotification 通知。 
   在Inactive →Background階段。應用從非活動狀態進入到後臺(不涉及咱們要重點說明的方法和通知)。
   在Background→Suspended 階段。調用applicationDidEnterBackground:方法,發出UIApplicationDidEnterBackgroundNotification 通知。

               

                               圖3 點擊Home鍵應用退出場景

  狀態躍遷的第二種狀況:應用不能夠在後臺運行或者掛起,其狀態躍遷狀況見圖4 ,共經歷4個階段5 個狀態:Active  → Inactive  → Background→Suspended→Not running 。

   在Active →Inactivd 階段。應用由活動狀態轉爲非活動狀態(不涉及咱們要重點說明的方法和通知)。
   在Inactive →Background階段。應用從非活動狀態進入到後臺(不涉及咱們要重點說明的方法和通知)。
   在Background→Suspended 階段。調用applicationDidEnterBackground:方法, 發出UIApplicationDidEnterBackgroundNotification 通知。
   在Suspended →Not running階段。調用applicationWillTerminate:方法,發出UIApplicationWillTerminateNotification通知。

                                      

                      圖4 點擊Home鍵,應用退出場景

  iOS 在iOS 4以前不支持多任務,點擊Home鍵時,應用會退出並中斷;而在iOS 4以後(包括iOS 4),操做系統可以支持多任務處理,點擊Home鍵應用會進入後臺但不會中斷(內存不夠的狀況除外)。
  應用在後臺也能夠進行部分處理工做,處理完成則進入掛起狀態。

(三)掛起從新運行場景

  場景描述:掛起狀態的應用從新運行。該場景的狀態躍遷過程如圖5 所示,共經歷3 個階段4 個狀態:Suspended  → Background  → Inactive  → Active 。

                              

                  圖5 從新運行場景的狀態躍遷過程

   Suspended→Background階段。應用從掛起狀態進入後臺(不涉及咱們講述的這幾個方法和通知)。
   Background→Inactive 階段。調用applicationWillEnterForeground: 方法,發出UIApplicationWillEnterForegroundNotification通知。 
   Inactive →Active 階段。調用applicationDidBecomeActive:方法,發出UIApplicationDidBecomeActiveNotification 通知。

(四)內存清除——應用終止場景

  場景描述:應用在後臺處理完成時進入掛起狀態(這是一種休眠狀態),若是這時發出低內存警告,爲了知足其餘應用對內存的須要,該應用就會被清除內存從而終止運行,該場景的狀態躍遷見圖6 。 

                      

                        圖6 內存清除終止場景

  內存清除的時候應用終止運行。內存清除有兩種狀況,多是系統強制清除內存,也多是由使用者從任務欄中手動清除(即刪掉應用)。內存清除後若是應用再次運行,上一次的運行狀態不會被保存,至關於應用第一次運行。

  在內存清除場景下,應用不會調用任何方法,也不會發出任何通知。

相關文章
相關標籤/搜索