iOS應用程序生命周期

avbsavbs 7年前發布 | 8K 次閱讀 iOS開發 移動開發

iOS應用的生命周期,程序是在前臺還是后臺運行,是活躍還是掛起狀態,對于開發者來說是很重要的,因為開發者需要針對各種狀態執行相應代碼,遵循apple的一些原則。

一個應用程序有五種狀態

應用程序狀態.jpg

  • Not running 未運行 ,程序沒啟動。
  • Inactive 未激活 ,程序在前臺運行,沒有接收到事件。在程序沒有事件需要處理時停留在這個狀態。
  • Active 激活,程序在前臺運行而且接收到了事件。這也是前臺的一個正常的模式
  • Backgroud 后臺,程序在后臺而且能執行代碼,大多數程序只能短暫停留這個狀態,馬上進入Suspended狀態。
  • Suspended 掛起,程序在后臺不能執行代碼。但程序不會被馬上殺死,當系統內存不足時,在這個狀態的程序占用的內存優先被回收。

切換狀態時的回調

在發生狀態切換時,都會調用delegate對象對應的方法來響應App狀態的改變。

  • application:willFinishLaunchingWithOptions: 這個方法是你在啟動時的第一次機會來執行代碼
  • application:didFinishLaunchingWithOptions: 這個方法允許你在顯示app給用戶之前執行最后的初始化操作
  • applicationDidBecomeActive: app已經切換到active狀態后需要執行的操作
  • applicationWillResignActive: app將要從前臺切換到后臺時需要執行的操作
  • applicationDidEnterBackground: app已經進入后臺后需要執行的操作
  • applicationWillEnterForeground: app將要從后臺切換到前臺需要執行的操作,但app還不是active狀態
  • applicationWillTerminate: app將要結束時需要執行的操作

接下來是App啟動、切換和鎖屏狀態時調用delegate對象的方法

  • App啟動

App啟動.gif

App啟動時,首先由not running狀態切換到inactive狀態,此時調用application:didFinishLaunchingWithOptions:方法;然后調用application:didFinishLaunchingWithOptions:方法,最后由inactive狀態切換到active狀態,此時調用applicationDidBecomeActive:方法。

  • App無事件響應

App無事件響應.gif

由active狀態切換到inactive狀態,此時調用applicationWillResignActive:方法。

  • 切換App

切換App.gif

當切換到另一個App時,由狀態active切換到inactive,此時調用applicationWillResignActive:方法;然后從inactive狀態切換到running(background)狀態,此時調用applicationDidEnterBackground:方法。

  • 鎖屏

鎖屏.gif

當手機鎖屏時,由狀態active切換到inactive,此時調用applicationWillResignActive:;然后再由inactive狀態切換到running(background)狀態,此時調用applicationDidEnterBackground:方法。

  • App響應中斷

App響應中斷.png

當一個基于警告式的中斷發生時,比如有電話打進來了,這是程序會臨時進入inactive狀態,這用戶可以選擇如何處理這個中斷。接著會調用applicationWillResignActive:方法,當中斷來臨時,你需要在這個方法中,停止timer或者周期性任務、停止視頻,音樂播放、停止游戲運行。當程序回到active狀態 , applicationDidBecomeActive: 會調用方法,恢復停止的操作。

  • App轉到后臺運行

App轉到后臺運行.png

首先調用applicationWillResignActive:方法,程序即將進入后臺運行,接著調用applicationDidEnterBackground: 方法,此時程序為background狀態,系統允許程序繼續運行一段時間,然后程序進入Suspended狀態。

  • App轉到前臺運行

App轉到前臺運行.png

系統喚醒程序,調用applicationWillEnterForeground: 方法,程序從background狀態改為active狀態,接著調用applicationDidBecomeActive:方法。當app處于掛起狀態時,它是不能執行任何代碼的。因此它不能處理在掛起期間發過來的通知,比如方向改變,時間改變,設置的改變還有其他影響程序展現的或狀態的通知。在程序返回后臺或前臺時,程序要正確的處理這些通知。

  • App終止

當App被系統終止(如內存不足、Crash)或者用戶自行終止。系統會在應用程序終止之前調用applicationWillTerminate: 方法,來保存用戶的一些重要數據以便下次啟動時恢復到app原來的狀態。

參考文章:

 

 

來自:http://www.jianshu.com/p/afaf8a32ae9f

 

 本文由用戶 avbsavbs 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!