iOS App生命周期初识

面对每次打开iOS应用时.都是否想到过其App运行过程:从启动到按Home键回到主屏幕,从运行中到按两下Home键进入任务管理界面,甚至iOS9后支持多任务的iPad当两个App出现在同一屏幕上,这几个情况App所处于什么状态.其过渡中又在进行怎样的状态切换呢,Let's get it !!! 😎

App状态变化的历史

iOS4之前的App时代,整个界面只允许一个App处于运行状态,而当某个App处于运行状态时意味着其他所有的App的活动都被终止并退出,无法接受任何事件.一个应用的状态转换只有运行、退出之间的变换.在iOS4之后的iPhone进入了多任务处理时代.也意味了当从一个应用切换到另一个应用时,系统不会马上将原来的应用终止退出,将其状态变成了suspend,而另一个应用的状态变成了running.

AppDelegate

运行一个App,应用程序会自动创建UIApplication单例对象,并用于引用着,其UIApplicaiton实例的delegate被赋值为AppDelegate实例对象,其也是一个单例,也永远不会被释放直到该App退出.而AppDelegate对象有着一系列在程序启动时的跟踪状态变化,处理从其他应用跳转、启动到此应用,或者后台运行代码的方法.以下是AppDelegate做为App的根对象的主要功能:

  1. 运行在启动时自己用来初始化应用的特点代码.
  2. 响应App从启动,到后台,到前台,到退出时各个状态时的指定方法.
  3. 负责处理接收推送通知或本地通知启动App的情况,处理手机低内存警告时的情况.
  4. 负责处理应用程序的状态保存和恢复.
  5. 响应由App处理的事件,而是指定控制器或视图.
  6. 处理数据的存储.

App状态的代理事件

新建一个Signle View Application后,系统会自动创建AppDelegate文件,系统默认提供的方法表示了App不同的运行状态.

  • application:willFinishLaunchingWithOptions
    在App启动时调用表示应用加载进程已经开始,常用来处理应用状态的存储和恢复

  • application:didFinishLaunchingWithOptions
    表示App将从未运行状态进入运行状态,用于对App的初始化操作.

  • applicationDidBecomeActive
    application:didFinishLaunchingWithOptions:之后调用,表示应用进入active状态,在applicationWillResignActive调用后App又回到active状态时也会调用.

  • applicationWillResignActive
    当某一操作阻塞App界面时会调用,如按Home键回到键入主界面,划出通知栏或者设置,临时的电话和通知,支持多任务的iPad进行侧边栏滑动时等情况下都会调用,使得App进入inavtive状态,往往操作结束后会调用applicationDidBecomeActive,使得App回到active状态.

  • applicationDidEnterBackground
    在App进入后台后调用,之前肯定会调用applicationWillResignActive方法.允许执行短时间 的任务代码如清理内存

  • applicationWillEnterForeground
    当App将从后台回到前台时调用,之后肯定调用applicationDidBecomeActive方法表示程序进入active状态,但App第一次启动时不是从后台启动,所以首次加载时不会调用此方法.

  • applicationWillTerminate
    当App将要被系统杀死时调用,通常用来对App进行清理工作,释放资源,保存数据等等,所执行的操作官方推荐最多耗时5s左右的事件来完成和返回,若时间过长系统杀死应用时会将使操作失败.其调用时机比较特殊,如果运行的App直接退出(非进入后台),会调用;若应用是从中断状态(此状态期间App无法接收任何事件)被系统退出,则不会被调用.

注意点

iOS8中,App会在根控制器初始化后调用viewDidAppear方法之后才会调用applicationDidBecomeActive,对于App启动的事件顺序为

application:didFinishLaunchingWithOptions:
⬇️
viewDidLoad
⬇️
viewWillAppear
⬇️
viewDidAppear
⬇️
applicationDidBecomeActive

而在iOS7和9中,App在调用applicationDidBecomeActive方法后才会调用根控制器的viewDidAppear,其调用顺序为

application:didFinishLaunchingWithOptions:
⬇️
viewDidLoad
⬇️
viewWillAppear
⬇️
applicationDidBecomeActive
⬇️
viewDidAppear

在这两情况下如果要对UIApplicationDidBecomeActiveNotification进行通知注册时就需要考虑其iOS的兼容性,否则就会出现问题了.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,847评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,208评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,587评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,942评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,332评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,587评论 1 218
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,853评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,568评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,273评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,542评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,033评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,373评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,031评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,073评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,830评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,628评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,537评论 2 269

推荐阅读更多精彩内容