详解iOS App生命周期

所谓生命周期,其实就是指从App启动到关闭这一过程中所发生的一系列事件。由于iOS 4中引入了多任务功能,App能够在后台执行,而iOS 3 是没有多任务功能的,故两者的生命周期并不相同。请听我慢慢道来。

用户点击主界面上相应App的图标来启动App。点击之后,依次发生了两个动作:

  • 显示启动画面
  • 调用main方法启动App

然后,主要的初始化工作将交给UIKit来完成。它将加载主nib文件显示用户界面,并准备响应用户操作事件。

下图是iOS4 App生命周期的示意图。

iOS 3上,当退出App时,App将被终止,并从内存中移除。App通常只有两种状态:

  • Active
  • Not running

而在iOS 4上,退出App时,App并没有被终止,仍然保留在内存中,只是被放到后台而已。此时,App的状态就变得复杂起来了,一共有5种:

  • Not running:App没有启动。
  • Inactive:App在前台运行,但当前不接收操作事件(虽然它可能在执行某些代码)。这种状态通常只用于在不同状态切换时的过渡,一般停留时间较短,例外的情况是,在锁屏状态或系统提示用户响应某些事件(如接听电话或收到短信),可以长时间停留在该状态。
  • Active:App在前台运行,并且接收操作事件。
  • Background:App在后台运行,并且正在执行代码。大多数App在进入Suspended状态之前会进入该状态。停留在该状态的时间长短将视执行代码的时间而定。
  • Suspended:App在后台运行,但没有执行代码。在低内存情况下,系统将在不发出任何通知的情况下终止该App,以为前台App腾出更多的内存。

那么,App是如何在这些状态间切换的呢?

用户启动一个已经保留在后台的应用时,系统先将App转换到Inactive转态,然后再转换到Active状态。这个过程将调用application delegate中的两个方法:

  • applicationWillEnterForeground
  • applicationDidBecomeActive

后台执行是iOS 4新增加的功能,在某些情况下,你可能想禁用该功能,虽然一般不鼓励这么做。操作方法是在Info.plist文件里面添加UIApplicationExitsOnSuspend属性,并将其值设置为YES。此时,App就只剩下Not running、Inactive、active三种状态,永远不会进入Background和Suspended状态。

当有来电、收到短信、日程提醒时,处理Active状态的应用将会临时进入Inactive状态。当用户决定接受或忽略来电、信息和日程时,App的状态将发生改变。

  • 如果用户忽略来电、短信和日程,将重新进入Active状态
  • 如果用户接收来电、短信和日程,将转入Suspended状态

相应地,也将触发application delegate的三个方法:

  • applicationWillResumeActive
  • applicationDidBecomeActive
  • applicationDidEnterBackground

参考资料:

  1. iOS Application Progarmming Guide
  2. Application’s Life Cycle in iOS4

你可能感兴趣的:(ios,application,化工,任务,电话)