App的幾種狀態(tài)
Not running ? 未運行 ?程序沒啟動.
Inactive ? ? ? ? ?這個狀態(tài)比較特殊: 未激活, 也叫放空狀態(tài). 一般在程序從后臺進入前臺或者程序剛開始啟動會出現(xiàn)短暫的inactive狀態(tài); 在App前臺時, 下拉 ? ? ? ? ? 通知欄是也處于這種狀態(tài), 一般不進行任何操作, 我測試過特殊的情況是在inactive狀態(tài)下是可以接受到遠程推送的.
Active ? ? ? ? ? ?激活 ? ? ? ?程序在前臺運行而且接收到了事件砸狞。這也是前臺的一個正常的模式.
Backgroud ? ? 后臺 ? ? ?程序在后臺而且能執(zhí)行代碼, 大多數(shù)程序進入這個狀態(tài)后會在在這個狀態(tài)上停留一會奏赘。時間到之后會進入掛起狀態(tài)(Suspended)。有的程序經(jīng)過特殊的請求后可以長期處于Backgroud狀態(tài)
Suspended ? ?掛起 ? ? ? ?程序在后臺不能執(zhí)行代碼。系統(tǒng)會自動把程序變成這個狀態(tài)而且不會發(fā)出通知冠蒋。當(dāng)掛起時旷痕,程序還是停留在內(nèi)存中的并淋,當(dāng)系統(tǒng)內(nèi)存低時醋安,系統(tǒng)就把掛起的程序清除掉,為前臺程序提供更多的內(nèi)存滥嘴。
Appdelegate中的代理方法
didFinishLaunching 告訴代理啟動基本完成程序準(zhǔn)備開始運行
WillResignActive 當(dāng)應(yīng)用程序?qū)⒁敕腔顒訝顟B(tài)執(zhí)行木蹬,在此期間,應(yīng)用程序不接收消息或事件若皱,比如來電話了
DidBecomeActive 當(dāng)應(yīng)用程序入活動狀態(tài)執(zhí)行镊叁,這個剛好跟上面那個方法相反
DidEnterBackground 當(dāng)程序被推送到后臺的時候調(diào)用。所以要設(shè)置后臺繼續(xù)運行走触,則在這個函數(shù)里面設(shè)置即可
WillEnterForeground 當(dāng)程序從后臺將要重新回到前臺時候調(diào)用晦譬,這個剛好跟上面的那個方法相反
WillTerminate 當(dāng)程序?qū)⒁顺鍪潜徽{(diào)用,通常是用來保存數(shù)據(jù)和一些退出前的清理工作饺汹。這個需要要設(shè)置UIApplicationExitsOnSuspend的鍵值
DidReceiveRemoteNotification: fetchCompletionHandle iOS7以后在收到遠程推送的時候調(diào)用, (在前臺時或者點擊通知欄上的通知都會跑這種方法, 在點擊通知啟動運用是也會調(diào)用didFinishLaunching方法)