深度解析iOS应用程序的生命周期(二)

转载自: http://www.csdn.net/article/2015-06-23/2825023/2

应用程序的状态和多任务

有时系统会从App一种状态切换另一种状态来响应系统发生的事件。例如,当用户按下Home键、电话打入或其他中断发生时,当前运行的应用程序会切换状态来响应。应用程序的状态有以下几种:

  • Not running:App还没运行
  • Inactive:App运行在foreground但没有接收事件
  • Active:App运行在foreground和正在接收事件
  • Background:运行在background和正在执行代码
  • Suspended:运行在background但没有执行代码

大多数发生状态转换时都会调用delegate对象对应的方法来响应App的状态改变。下面汇总了delegate对象的所有方法,当App状态发生转换时,你可能会使用到它们。

  • application:willFinishLaunchingWithOptions: - 这个方法是你在启动时的第一次机会来执行代码
  • application:didFinishLaunchingWithOptions: - 这个方法允许你在显示app给用户之前执行最后的初始化操作
  • applicationDidBecomeActive: - app已经切换到active状态后需要执行的操作
  • applicationWillResignActive: - app将要从前台切换到后台时需要执行的操作
  • applicationDidEnterBackground: - app已经进入后台后需要执行的操作
  • applicationWillEnterForeground: - app将要从后台切换到前台需要执行的操作,但app还不是active状态
  • applicationWillTerminate: - app将要结束时需要执行的操作

现在讲下App启动、来回切换App和锁屏时状态的切换和调用对应哪些delegate对象的方法:

  • App启动和active/inactive

如 图所示,当App启动时,首先由not running状态切换到inactive状态,此时调用application:didFinishLaunchingWithOptions:方法; 然后由inactive状态切换到active状态,此时调用applicationDidBecomeActive:方法。

当App发生中断时,由active状态切换到inactive状态,此时调用applicationWillResignActive:方法。

  • 来回切换App

如 图所示,当切换到另一个App时,由状态active切换到inactive,此时调用applicationWillResignActive:方法; 然后从inactive状态切换到running状态,此时调用applicationDidEnterBackground:方法。

而 当切换回本来的App时,由running状态切换到inactive状态,此时调用applicationWillEnterForeground:方 法,然后由inactive状态切换到active状态,调用applicationDidBecomeActive:方法。

  • 锁屏

如 何所示,当手机锁屏时,由状态active切换到inactive,此时调用applicationWillResignActive:;然后再由 inactive状态切换到running状态,此时调用applicationDidEnterBackground:方法。

更多关于app状态切换以及调用app delegate哪些方法,请观看WWDC 2011 Session的session_320__adopting_multitasking_in_your_app视频。

应用程序的终止

系 统常常是为其他app启动时由于内存不足而回收内存最后需要终止应用程序,但有时也会是由于app很长时间才响应而终止。如果app当时运行在后台并且没 有暂停,系统会在应用程序终止之前调用applicationWillTerminate:来保存用户的一些重要数据以便下次启动时恢复到app原来的状 态。

总结

本文总结了iOS应用程序从启动 到结束过程中有哪些关键对象在参与,以及当用户与系统交互时产生事件时,系统利用main run loop来管理事件循环,决定将事件交给系统哪些对象处理和如何处理。而当App启动、来回切换App和锁屏时,App的状态如何切换和调用对应的哪些 app delegate对象来处理。

扩展阅读

 

猜你喜欢

转载自hongtoushizi.iteye.com/blog/2221500