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