iOS-應(yīng)用程序的生命周期

iOS 應(yīng)用程序啟動(dòng)的過(guò)程中的一系列活動(dòng)會(huì)影響應(yīng)用的加載時(shí)間志膀,為了獲得更好的應(yīng)用體驗(yàn)触幼,對(duì)App應(yīng)用程序的的生命周期有所了解是必要的.

啟動(dòng)過(guò)程

App啟動(dòng)和進(jìn)入后臺(tái)如下圖所示:


應(yīng)用啟動(dòng).png
應(yīng)用后臺(tái).png

iOS開(kāi)發(fā)人員應(yīng)該對(duì)AppDelegate中的didFinishLaunchingWithOptions啟動(dòng)方法不會(huì)陌生:
<pre><code>func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { // Override point for customization after application launch. FlyElephant return true }</code></pre>

這是整個(gè)App最核心的位置类垦,不能有任何的錯(cuò)誤藕甩,尤其是不能發(fā)生崩潰剩瓶,否則只能等重新發(fā)版來(lái)解決锋叨,如果用戶(hù)基數(shù)比較大菊匿,只能是祈禱保佑了.

didFinishLaunchingWithOptions一般都基礎(chǔ)功能設(shè)置付呕,項(xiàng)目開(kāi)發(fā)中常見(jiàn)設(shè)置包括崩潰報(bào)告上傳,網(wǎng)絡(luò)請(qǐng)求設(shè)置跌捆,UI初始化徽职,網(wǎng)絡(luò)請(qǐng)求緩存設(shè)置,用戶(hù)登錄狀態(tài)判斷佩厚,業(yè)務(wù)第三方SDK初始化.

App的啟動(dòng)時(shí)間與公司的業(yè)務(wù)關(guān)聯(lián)性很大姆钉,如果App啟動(dòng)時(shí)間太長(zhǎng),可以對(duì)啟動(dòng)過(guò)程配置過(guò)程分出必須初始化和非必須初始化的業(yè)務(wù)可款,對(duì)于一些不必在主線(xiàn)程中執(zhí)行的任務(wù)育韩,可以在子線(xiàn)程中異步執(zhí)行.

iOS最常見(jiàn)的常見(jiàn)的操作是雙擊Home鍵應(yīng)用進(jìn)入前后臺(tái)切換,執(zhí)行代碼如下:
<pre><code>` func applicationDidEnterBackground(_ application: UIApplication) {
// Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later.
// If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.
}

func applicationWillEnterForeground(_ application: UIApplication) {
    // Called as part of the transition from the background to the active state; here you can undo many of the changes made on entering the background.
}`</code></pre>

外部鏈接進(jìn)入App期望跳轉(zhuǎn)到指定頁(yè)面的執(zhí)行方法(微信闺鲸,支付寶支付的回調(diào)):
<pre><code>` func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {

}`</code></pre>

App在每次版本更新之后升級(jí)啟動(dòng)需要注意是否處理上個(gè)版本的緩存筋讨,數(shù)據(jù)是否同步,版本號(hào)更新以及數(shù)據(jù)庫(kù)升級(jí).

推送通知

iOS消息推送在delegate中的執(zhí)行的方法:
<pre><code>` func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {

}

`</code></pre>

ApplicationState的三種狀態(tài)激活狀態(tài)摸恍,待激活狀態(tài)(正在進(jìn)入didFinishLaunchingWithOptions,運(yùn)行在前臺(tái)沒(méi)有接收事件)悉罕,后臺(tái)狀態(tài).

<pre><code>`public enum UIApplicationState : Int {

case active

case inactive

case background

}`</code></pre>

當(dāng)app啟動(dòng)時(shí)赤屋,首先由not running狀態(tài)切換到inactive狀態(tài),此時(shí)調(diào)用application:didFinishLaunchingWithOptions:方法壁袄,然后由inactive狀態(tài)切換到active狀態(tài)类早,此時(shí)調(diào)用applicationDidBecomeActive:方法.
<pre><code>func applicationDidBecomeActive(_ application: UIApplication) { // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. }</code></pre>

當(dāng)app發(fā)生中斷時(shí),由active狀態(tài)切換到inactive狀態(tài)嗜逻,此時(shí)調(diào)用applicationWillResignActive:方法.
<pre><code>func applicationWillResignActive(_ application: UIApplication) { // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. // Use this method to pause ongoing tasks, disable timers, and invalidate graphics rendering callbacks. Games should use this method to pause the game. }</code></pre>

當(dāng)切換到另一個(gè)app時(shí)涩僻,由狀態(tài)active切換到inactive,此時(shí)調(diào)用applicationWillResignActive:方法栈顷,然后從inactive狀態(tài)切換到running狀態(tài)逆日,此時(shí)調(diào)用applicationDidEnterBackground:方法.

當(dāng)切換到本來(lái)的app時(shí),由running狀態(tài)切換到inactive狀態(tài)萄凤,此時(shí)調(diào)用applicationWillEnterForeground:方法室抽,然后由inactive狀態(tài)切換到active狀態(tài),調(diào)用applicationDidBecomeActive:方法.

應(yīng)用在didReceiveRemoteNotification回調(diào)接受通知靡努,處理通知事件.
App在運(yùn)行狀態(tài)中會(huì)有各種不同的狀態(tài)隨時(shí)準(zhǔn)備切換坪圾,針對(duì)不同的狀態(tài)可以進(jìn)行事件處理,完善應(yīng)用程序的體驗(yàn).

終止

iOS系統(tǒng)常常是為其他app啟動(dòng)時(shí)由于內(nèi)存不足而回收內(nèi)存最后需要終止應(yīng)用程序惑朦,但有時(shí)也會(huì)是由于app很長(zhǎng)時(shí)間才響應(yīng)而終止.如果app當(dāng)時(shí)運(yùn)行在后臺(tái)并且沒(méi)有暫停兽泄,系統(tǒng)會(huì)在應(yīng)用程序終止之前調(diào)用applicationWillTerminate:來(lái)保存用戶(hù)的一些重要數(shù)據(jù)以便下次啟動(dòng)時(shí)恢復(fù)到app原來(lái)的狀態(tài).

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市行嗤,隨后出現(xiàn)的幾起案子已日,更是在濱河造成了極大的恐慌,老刑警劉巖栅屏,帶你破解...
    沈念sama閱讀 212,029評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件飘千,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡栈雳,警方通過(guò)查閱死者的電腦和手機(jī)护奈,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,395評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)哥纫,“玉大人霉旗,你說(shuō)我怎么就攤上這事≈В” “怎么了厌秒?”我有些...
    開(kāi)封第一講書(shū)人閱讀 157,570評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀(guān)的道長(zhǎng)擅憔。 經(jīng)常有香客問(wèn)我鸵闪,道長(zhǎng),這世上最難降的妖魔是什么暑诸? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,535評(píng)論 1 284
  • 正文 為了忘掉前任蚌讼,我火速辦了婚禮辟灰,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘篡石。我一直安慰自己芥喇,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,650評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布凰萨。 她就那樣靜靜地躺著继控,像睡著了一般。 火紅的嫁衣襯著肌膚如雪沟蔑。 梳的紋絲不亂的頭發(fā)上湿诊,一...
    開(kāi)封第一講書(shū)人閱讀 49,850評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音瘦材,去河邊找鬼。 笑死仿畸,一個(gè)胖子當(dāng)著我的面吹牛食棕,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播错沽,決...
    沈念sama閱讀 39,006評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼簿晓,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了千埃?” 一聲冷哼從身側(cè)響起憔儿,我...
    開(kāi)封第一講書(shū)人閱讀 37,747評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎放可,沒(méi)想到半個(gè)月后谒臼,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,207評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡耀里,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,536評(píng)論 2 327
  • 正文 我和宋清朗相戀三年蜈缤,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片冯挎。...
    茶點(diǎn)故事閱讀 38,683評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡底哥,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出房官,到底是詐尸還是另有隱情趾徽,我是刑警寧澤,帶...
    沈念sama閱讀 34,342評(píng)論 4 330
  • 正文 年R本政府宣布翰守,位于F島的核電站孵奶,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏潦俺。R本人自食惡果不足惜拒课,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,964評(píng)論 3 315
  • 文/蒙蒙 一徐勃、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧早像,春花似錦僻肖、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,772評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至冀自,卻和暖如春揉稚,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背熬粗。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,004評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工搀玖, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人驻呐。 一個(gè)月前我還...
    沈念sama閱讀 46,401評(píng)論 2 360
  • 正文 我出身青樓灌诅,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親含末。 傳聞我的和親對(duì)象是個(gè)殘疾皇子猜拾,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,566評(píng)論 2 349

推薦閱讀更多精彩內(nèi)容

  • 0. 引子 iOS應(yīng)用程序一般都是由自己編寫(xiě)的代碼和系統(tǒng)框架(system frameworks)組成,系統(tǒng)框架提...
    i愛(ài)吃土豆的貓閱讀 536評(píng)論 0 0
  • iOS應(yīng)用程序的生命周期 來(lái)源: Sam_Lau(@Sam_Lau_Dev ) 鏈接:http://www.jia...
    簡(jiǎn)簡(jiǎn)蝸牛閱讀 331評(píng)論 0 1
  • iOS應(yīng)用程序一般都是由自己編寫(xiě)的代碼和系統(tǒng)框架(system frameworks)組成佣盒,系統(tǒng)框架提供一些基本i...
    Sam_Lau閱讀 37,931評(píng)論 17 235
  • 面具是一個(gè)笑臉 人見(jiàn)人愛(ài)的笑臉 面具下是一個(gè)哭臉 流著悲傷的哭臉 人們只看見(jiàn)你的笑 看不見(jiàn)你的哭 面具是一個(gè)哭臉 ...
    山長(zhǎng)說(shuō)閱讀 217評(píng)論 0 0
  • 睡醒起來(lái)挎袜,果然除了廣寒宮,整個(gè)天庭都是空蕩蕩的肥惭,倒像鬼界盯仪。哦,不對(duì)务豺,如今鬼界可熱鬧了磨总,借酆都鬼城與人間想通之處...
    簡(jiǎn)彤閱讀 194評(píng)論 0 0