【iOS架构】iOS应用的生命周期

程序的5种状态

iOS程序的5种状态

如图,iOS应用主要分为5种状态。1 [^2]

Not Running (非运行状态)。应用没有运行或被系统终止。

Inactive(前台非活动状态)。应用正在进入前台状态,但不能接受事件处理。app可能正在执行其他代码。

Active(前台活动状态)。应用进入前台状态,能接受事件处理。

Background(后台状态)。应用进入后台后,依然能够执行代码。如果有可执行的代码,就会执行代码,如果没有可执行的代码或者可执行的代码执行完毕,应用会马上进入挂起状态。

Suspended(挂起状态)。处于挂起的应用进入一种“冷冻”状态,不能执行代码。如果系统内存不够,应用会被终止。

关于AppDelegate中的各种委托方法和通知

UIApplicationDidFinishLaunchingNotification (通知名称) ---> application:didFinishLaunchingWithOptions:(委托方法):在应用程序启动后直接进行应用程序级编码的主要方式。

UIApplicationWillResignActiveNotification(通知名称)--->applicationWillResignActive:(委托方法):用户按下主屏幕按钮调用,不要在此方法中假设将进入后台状态,只是一种临时变化,最终将恢复到活动状态

UIApplicationDidBecomActiveNotification(通知名称) ---->applicationDidBecomeActive:(委托方法):应用程序按下主屏幕按钮后想要将应用程序切换到前台时调用,应用程序启动时也会调用,可以在其中添加一些应用程序初始化代码

> applicationWillResignActive:和applicationDidBecomeActive:这两个方法代表着应用程序从活动状态过度到不活动状态,是启用或禁用任何动画、应用程序的音频或其他处理应用程序表示(向用户)的项目的不错位置。

UIApplicationDidEnterBackgroundNotification(通知名称)----->applicationDidEnterBackground:(委托方法):应用程序在此方法中释放所有可在以后重新创建的资源,使计时器失效,保存所有用户数据,关闭网络连接等。如果需要,也可以在这里请求在后台运行更长时间。如果在这里花费了太长时间(超过5秒),系统将断定应用程序的行为异常并终止他。

UIApplicationWillEnterForegroundNotification(通知名称) ---->applicationWillEnterForeground:(委托方法):当应用程序在applicationDidEnterBackground:花费了太长时间,终止后,应该实现此方法来重新创建在applicationDidEnterBackground中销毁的内容,比如重新加载用户数据、重新建立网络连接等。

> 请注意,当巧用applicationDidEnterBackground:时,可以安全地假设最近也调用了applicationWillResignActive

UIApplicationWllTerminateNotification(通知名称) ----> applicationWillTerminate:(委托方法):现在很少使用,只有在应用程序已进入后台,并且系统出于某种原因决定跳过暂停状态并终止应用程序时,才会真正调用它。

状态跃迁过程的调用方法

非运行状态–应用启动场景

场景描述:用户点击应用图标,可能是第一次启动,也可能是应用终止后重新启动。共经历两个阶段3个状态。
Not running -> Inactive -> Active

Not running -> Inactive阶段。调用application:disFinishLaunchingWithOptions:方法,发出UIApplicationDidFinishLaunchingNotification通知。

Inactive -> Active阶段。调用applicationDidBecomeActive:方法,发出UIApplicationDidBecomeActiveNotification通知。

双击Home键–应用处于前台非活动状态

场景描述:应用处于运行状态(即Active状态)时,双击Home键。
Active -> Inactive

Active -> Inactive阶段。调用applicationWillResignActive:方法,发出UIApplicationWillResignActiveNotification通知。

双击Home键后再回到前台–应用处于前台由非活动状态变为活动状态

场景描述:应用处于运行状态(即Active状态)时,双击Home键。
Inactive -> Active

Inactive -> Active阶段。调用applicationDidBecomeActive:方法,发出UIApplicationDidBecomeActiveNotification通知。

点击Home键/锁屏–应用退出场景

场景描述:应用处于运行状态(即Active状态)时,点击Home键/锁屏或者有其他的应用导致当前应用终止。
状态跃迁过程分两种情况:

可以在后台运行或者挂起;
不可以在后台运行或者挂起。

对于第一种情况:共经历3个阶段4个状态。
Active -> Inactive -> Background -> Suspended

Active -> Inactive阶段。调用applicationWillResignActive:方法,发出UIApplicationWillResignActiveNotification通知。
Inactive -> Background阶段。应用从非活动状态进入到后台。
Background -> Suspended阶段。调用applicationDidEnterBackground:方法,发出UIApplicationDidEnterBackgroundNotification通知。

对于第二种情况:共经历4个阶段5个状态。
Active -> Inactive -> Background -> Suspended -> Not running

Active -> Inactive阶段。应用由活动状态转为非活动状态。
Inactive -> Background阶段。应用从非活动状态进入到后台。
Background -> Suspended阶段。调用applicationDidEnterBackground:方法,发出UIApplicationDidEnterBackgroundNotification通知。
Suspended -> Not running阶段。调用applicationWillTerminate:方法,发出UIApplicationWillTerminateNotification通知。

挂起重新运行场景–切换app到前台/解锁使app处于前台

场景描述:挂起状态的应用重新运行。共经历3个阶段4个状态。
Suspended -> Background -> Inactive -> Active

Suspended -> Background阶段。应用从挂起状态进入后台。
Background -> Inactive阶段。调用applicationWillEnterForeground:方法,发出UIApplicationWillEnterForegroundNotification通知。
Inactive -> Active阶段。调用applicationDidBecomeActive:方法,发出UIApplicationDidBecomeActiveNotification通知。

内存清除–应用终止场景

场景描述:应用在后台处理完成时进入挂起状态(一种休眠状态)。如果这时发出低内存警告,为了满足其他应用对内存的需求,该应用就会被清除内存而终止运行。这时不会再调用applicationWillTerminate:方法,即也不会发出UIApplicationWillTerminateNotification通知。

内存清除时应用终止运行。有两种情况:

系统强制清除内存
由使用者从任务栏中手动清除(即删除应用)

内存清除后如果应用再次运行,上一次的运行状态不会被保存,相当于应用第一次运行。这种场景下,应用不会调用任何方法,也不会发出任何通知。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值