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