標籤:
2016-03-22 13:58:37.681 HBLifeCircleTest[2705:146296] -[AppDelegate application:didFinishLaunchingWithOptions:]2016-03-22 13:58:37.685 HBLifeCircleTest[2705:146296] -[AppDelegate applicationDidBecomeActive:]//點擊home鍵2016-03-22 14:00:06.786 HBLifeCircleTest[2705:146296] -[AppDelegate applicationWillResignActive:]
2016-03-22 14:00:07.503 HBLifeCircleTest[2705:146296] -[AppDelegate applicationDidEnterBackground:]//點擊應用2016-03-22 14:00:11.134 HBLifeCircleTest[2705:146296] -[AppDelegate applicationWillEnterForeground:]2016-03-22 14:00:11.647 HBLifeCircleTest[2705:146296] -[AppDelegate applicationDidBecomeActive:]
//雙擊home退出2016-03-22 14:00:19.463 HBLifeCircleTest[2705:146296] -[AppDelegate applicationWillResignActive:]
2016-03-22 14:00:28.677 HBLifeCircleTest[2705:146296] -[AppDelegate applicationDidEnterBackground:]2016-03-22 14:00:28.680 HBLifeCircleTest[2705:146296] -[AppDelegate applicationWillTerminate:]
IOS的應用程式一共有5種狀態。
- Not running(未運行):程式未啟動
- Inactive(未啟用):其他兩個狀態切換時出現的短暫狀態。唯一在此狀態停留時間比較長的情況是:當使用者鎖屏時?或者系統提示使用者去響應Alert視窗(如來電、資訊)時
- Active(啟用):在螢幕上顯示的正常運行狀態,該狀態下可以接收使用者輸入並更新顯示
- Backgroud(後台):程式在後台且能執行代碼。使用者按下Home鍵不久後進入此狀態(先進入了Inactive狀態,再進入Background狀態),然後會迅速進入掛起狀態(Suspended)。有的程式經過特殊的請求後可以長期處於Backgroud狀態
- Suspended(掛起):程式在後台不能執行代碼。普通程式在進入Background狀態不久後就會進入此狀態。當掛起時,程式還是停留在記憶體中的,當系統記憶體低時,系統就把掛起的程式清除掉,為前景程式提供更多的記憶體
關於Active和Inactive的切換:
應用程式在前台時有2種狀態:Active和Inactive。大多數情況下,Inactive狀態只是其他兩個狀態切換時出現的短暫狀態(不是任意兩個狀態之間的切換都會進入Inactive,見圖),如開啟應用,它會從Not Running先進入Inactive再進入Active;如前後台應用程式切換時,Inactive會在Active和Background之間短暫出現。但是也有其他情況,Active和Inactive可以在前台運行時進行切換,比如系統彈出Alert,此時應用會從Active切換到Inactive,直到使用者確認再返回Actvie;再如使用者拉下通知頁,也會發生Active和Inactive的切換;還有來電但拒接、雙擊Home鍵但返回原應用等都不進入Background,而只是在Active和Inactive切換。
狀態切換圖
1.application:didFinishLaunchingWithOptions:
程式首次已經完成啟動時執行,若直接啟動,launchOptions中沒有資料;否則,推送,3Dtouch等方式開啟應用。launchOptions將包含對應方式的內容。
2.applicationWillResignActive(將進入後台)
程式將要失去Active狀態時調用,比如按下Home鍵或有電話資訊進來。對應applicationWillEnterForeground(將進入前台),這個方法用來
暫停正在執行的任務;
禁止計時器;
減少OpenGL ES幀率;
若為遊戲應暫停遊戲;
總結為一個字:停!
3.applicationDidEnterBackground(已經進入後台)
程式已經進入後台時調用,對應applicationDidBecomeActive(已經變成前台),這個方法用來
釋放共用資源;
儲存使用者資料(寫到硬碟);
作廢計時器;
儲存足夠的程式狀態以便下次恢複;
總結為4個字:釋放、儲存!
4.applicationWillEnterForeground(將進入前台)
程式即將進去前台時調用,對應applicationWillResignActive(將進入後台)。這個方法用來撤銷applicationWillResignActive中做的改變。
5.applicationDidBecomeActive(已經進入前台)
程式已經變為Active(前台)時調用。對應applicationDidEnterBackground(已經進入後台)。若程式之前在後台,最後在此方法內重新整理使用者介面。
6.applicationWillTerminate
程式即將退出時調用。記得儲存資料,如
其他類使用相應NotificationCenter通知來感知這些狀態變化。
文/HustBroventure(簡書作者)
原文連結:http://www.jianshu.com/p/3ffe5bd4c949
著作權歸作者所有,轉載請聯絡作者獲得授權,並標註“簡書作者”。
20160512 UIApplecation shuxun