iOS App生命週期

陳振發表於2017-12-19
方法 本地通知 說明
application:didFinishLaunchingWithOptions: UIApplicationDidFinishLaunchingNotification 應用啟動並進行初始化時會呼叫該方法併發出通知。這個階段會例項化根檢視控制器
applicationDidBecomeActive: UIApplicationDidBecomeActiveNotification 應用進入前臺並處於活動狀態時呼叫該方法併發出通知。這個階段可以恢復UI狀態(例如遊戲狀態)
applicationWillResignActive: UIApplicationWillResignActiveNotification 應用從活動態進入非活動態時呼叫該方法併發出通知。這個階段可以儲存UI的狀態(例如遊戲狀態)
applicationDidEnterBackground: UIApplicationDidEnterBackgroundNotification 應用進入後臺時呼叫該方法併發出通知,這個階段可以儲存使用者資料,釋放一些資源(一些可重新載入的圖片等資源)
applicationWillEnterForeground: UIApplicationWillEnterForegroundNotification 應用進入前臺,但是還沒有處於活動狀態時呼叫該方法併發出通知。這個階段可以恢復使用者資料
applicationWillTerminate: UIApplicationTerminateNotification 應用被終止時呼叫該方法併發出通知。這個階段釋放一些資源,也可以儲存使用者資料

當產生中斷時,App應該在applicationWillResignActive:方法中:

  • 停止timer 和其他週期性的任務
  • 停止任何正在執行的請求
  • 暫停視訊的播放
  • 如果是遊戲那就暫停它
  • 減少OpenGL ES的幀率 掛起任何分發的佇列和不重要的操作佇列(你可以繼續處理網路請求或其他時間敏感的後臺任務)。 當程式回到active狀態 , applicationDidBecomeActive: 方法應該上面提到的任務重新開始,比如重新開始timer, 繼續分發佇列,提高OpenGL ES的幀率。不過遊戲要回到暫停狀態,不能自動開始。

當App進入後臺時,應當:

  • 儲存使用者資料或狀態資訊,所有沒寫到磁碟的檔案或資訊,在進入後臺時,最後都寫到磁碟去,因為程式可能在後臺被殺死,
  • 釋放盡可能釋放的記憶體
應用進入後臺後如果沒有設定在後臺執行的話,5s後將會掛起,掛起的App仍將在記憶體中,
但當系統記憶體較低時,將會終止一些掛起的程式來回收記憶體。那些記憶體最大的程式首先被終止。
因此當App進入後臺後應儘可能的釋放記憶體
複製程式碼

非執行狀態-應用啟動場景

iOS App生命週期

點選home鍵-應用退出場景

應用可以在後臺執行或掛起的情況:

iOS App生命週期

應用不可以在後臺執行:

iOS App生命週期

掛起重新執行的場景

iOS App生命週期

應用進入後臺後如果沒有設定在後臺執行的話,5s後將會掛起,掛起的App仍將在記憶體中,但當系統記憶體較低時,將會終止一些掛起的程式來回收記憶體。

相關文章