设为首页 - 加入收藏
您的当前位置:IT独行侠新闻社 > 移动开发 > 正文

IT独行侠:深度解析iOS应用程序的生命周期

来源:网络整理 编辑:IT独行侠 时间:2017-06-21

应用程序的状态和多任务

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

IT独行侠:深度解析iOS应用程序的生命周期


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

IT独行侠:深度解析iOS应用程序的生命周期


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

IT独行侠:深度解析iOS应用程序的生命周期


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

来回切换App

IT独行侠:深度解析iOS应用程序的生命周期


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

IT独行侠:深度解析iOS应用程序的生命周期


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

锁屏

IT独行侠:深度解析iOS应用程序的生命周期


如何所示,当手机锁屏时,由状态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对象来处理。

扩展阅读作者简介:刘耀柱(@Sam_Lau_Dev),iOS Developer兼业余Designer,参与开发技术前线iOS项目翻译,个人博客:,GitHub:https://github.com/samlaudev。

CSDN移动将持续为您优选移动开发的精华内容,共同探讨移动开发的技术热点话题,涵盖移动应用、开发工具、移动游戏及引擎、智能硬件、物联网等方方面面,如果您有想分享的技术、观点,可通过电子邮件(tangxy#csdn.net,请把#改成@)投稿。

IT独行侠新闻社
栏目分类

本网站部分文章采集于网络、报纸、杂志等其它媒体,如侵犯了原作者的版权,请来信告知,本站将立即删除

Copyright ©2017 www.itxws.com IT独行侠新闻社 让IT独行的路上不再孤单

Top