深入浅出 iOS 之生命周期
转:http://blog.csdn.net/kesalin/article/details/6691766
iOS应用程序的生命周期相比 Android 应用程序的生命周期来说,没那么简明易懂,但是也并不复杂。iOS应用程序的生命周期又根据系统是否支持多线程分为两种:
不支持多线程的iOS4之前的系统以及支持多线程的iOS4及其之后的系统。
iOS4 之前系统,app的生命周期图如下所示:
感谢 oliver@drobnik.com 提供如错详细的图,并以cc许可发布。
从图中我们可以看出:
step 1,点击 app icon 或者从应用程序url(比如在Safari地址栏中输入应用程序url)启动应用程序。
step 2,就会进入 UIApplicationDelegate 的
- (void)applicationDidFinishLaunching:(UIApplication *)application;
或
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions;
step 3, 如果是从 url 启动的则先进入 UIApplicationDelegate 的
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url;
然后再跳转到step 4;否则直接跳转到step 4;
step 4,进入 UIApplicationDelegate 的
- (void)applicationDidBecomeActive:(UIApplication *)application;
step 5,进入应用程序主循环,这时应用程序已经是活动的了,用户可以与应用程序交互。
step 6,在 step 5 状态下,如果按住 home 键或者进行任务切换操作,然后跳转到 step 8;
step 7,在 step 5 状态下,应用程序被中断(如来电,来短信),进入 UIApplicationDelegate 的
- (void)applicationWillResignActive:(UIApplication *)application;
如果用户选择不处理继续留在当前应用程序,则回到 step 4;如果用户选择处理,则跳转到 step 8;
step 8,进入 UIApplicationDelegate 的
- (void)applicationWillTerminate:(UIApplication *)application;
当前应用程序关闭。
注:这里所说的进入,并非真正的调用该消息,只是走流程。因为 UIApplicationDelegate 的方法都是@optional的,实现了则真正执行,没有实现则什么也不做。
iOS4 及其之后的系统,app的生命周期图如下所示:
感谢 oliver@drobnik.com 提供如错详细的图,并以cc许可发布。
从图中我们可以看出,支持多线程之后,情况要复杂得多了。但总体还是有规律可循的,多了一个后台模式。
在app被中断之后,先进入后台:
- (void)applicationDidEnterBackground:(UIApplication *)application;
在app被中断后继续时,要从后台模式切换到前台:
- (void)applicationWillEnterForeground:(UIApplication *)application;
注意:iOS3.2 下构建的 app 也会进入applicationDidEnterBackground:,然后立马就关闭掉了。而iOS4.x 下构建的 app,进入applicationDidEnterBackground:后,不会立马关闭掉,而是留在后台状态。在后台状态下,无论你是通过点击 app icon还是任务切换回到前台,首先进入的是 applicationWillEnterForeground,然后才是 applicationDidBecomeActive。
当系统内存不足时,系统会强行关闭那些尚在内存中但处于后台状态的 app,以腾出足够的内存供使用。但是那些被强行关闭的程序不会调用任何UIApplicationDelegate的委托方法,只会得到一个KILL 信号。当我们长按app icon,强行关闭app,也是同样的处理过程。
在iOS4及之后的系统中,在app运行过程中接电话/查看短信,应用程序不会被关闭,它会进入后台模式。我们可以双击 home 键查看所有当前运行着的应用程序。
深入浅出 iOS 之生命周期的更多相关文章
- (转)深入浅出 iOS 之生命周期
原文:http://www.cocoachina.com/applenews/devnews/2011/0817/3129.html 深入浅出 iOS 之生命周期 发布于:2011-08-17 10: ...
- 【转】深入浅出 iOS 之生命周期
[iOS]深入浅出 iOS 之生命周期 深入浅出 iOS 之生命周期 http://blog.csdn.net/kesalin/article/details/6691766 罗朝辉(http:// ...
- 图解ios程序生命周期
图解ios程序生命周期 应用程序启动后状态有Active.Inactive.Background.Suspended.Not running这5种状态,几种状态的转换见下图: 在AppDelegate ...
- iOS的生命周期
iOS应用程序一般都是由自己编写的代码和系统框架组成.系统框架提供了一些基本的infrastructure给APP来运行,而开发者则自己编写代码定制APP的外观和行为,了解iOS infrastruc ...
- iOS ViewController生命周期
ViewController是view的controller,viewController的职责主要包括管理内部各个view的加载显示与卸载,同时负责与其他ViewController的通信和协调. ...
- iOS视图生命周期与视图控制器关系
iOS中视图是一个应用的重要组成部分,功能的实现与其息息相关,而视图控制器控制着视图,其重要性在整个应用中不言而喻. 视图生命周期与视图控制器关系 以视图的5种状态为基础,我们来系统的了解一下 ...
- 【Xamarin 开发 IOS --IOS ViewController生命周期】
ViewController ViewController是IOS开发中MVC模式中的C,ViewController是view的controller,ViewController的职责主要包括管理内 ...
- iOS程序生命周期 AppDelegate
iOS的应用程序的生命周期,还有程序是运行在前台还是后台,应用程序各个状态的变换,这些对于开发者来说都是很重要的. iOS系统的资源是有限的,应用程序在前台和在后台的状态是不一样的.在后台时,程序会受 ...
- iOS开发——生命周期
为了处理好应用程序的挂起.暂停等情况下的数据保存,或对应添加所需处理,我们必须了解ios生命周期. 但是不要去背去记,做个实验就好. - (BOOL)application:(UIApplicatio ...
随机推荐
- oracle 快速删除大批量数据方法(全部删除,条件删除,删除大量重复记录)
oracle 快速删除大批量数据方法(全部删除,条件删除,删除大量重复记录) 分类: ORACLE 数据库 2011-05-24 16:39 8427人阅读 评论(2) 收藏 举报 oracledel ...
- 暑假集训单切赛第一场 CF 266E More Queries to Array(线段树+二项式展开式)
比赛时,第二题就是做的这个,当时果断没仔细考虑,直接用线段树暴力求.结果易想而知,超时了. 比赛后搜了搜题解,恍然大悟. 思路:显然用线段树,但是由于每次查询都会有变,所以不可能存储题目中的式子. ...
- C#画图
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Dr ...
- DataRow.RowState 属性
RowState 的值取决于两个因素:已对该行执行的操作的类型,以及是否已对 DataRow 调用了 AcceptChanges. private void DemonstrateRowState() ...
- Mysql 1030 Got error -1 from storage engine 错误解决
检查你的my.cnf或my.ini,里面会有一个参数innodb_force_recovery,你看看他的值,默认是没有这个参数,没有的话,他的默认值是0,这个参数的值如果大于0,innodb会被禁止 ...
- lintcode:合并区间
题目: 合并区间 给出若干闭合区间,合并所有重叠的部分. 样例 给出的区间列表 => 合并后的区间列表: [ [ [1, 3], [1, 6], [2, 6], => [8, 10], [ ...
- lintcode:Plus One 加一
题目: 加一 给定一个非负数,表示一个数字数组,在该数的基础上+1,返回一个新的数组. 该数字按照大小进行排列,最大的数在列表的最前面. 样例 给定 [1,2,3] 表示 123, 返回 [1,2,4 ...
- 通过数据库表自动生成POJO(JavaBean)对象
主类: package bqw.tool; import java.util.ResourceBundle;import java.sql.DriverManager;import java.sql. ...
- 前端自动化工具:Grunt使用教程
1.下载node.js,然后将node.exe文件所在的目录加入path环境变量 2.安装npm管理工具 2.1.下载npm源码,解压到npm文件夹里,不要把npm放在和node.exe相同的文件夹 ...
- PHP 语言需要避免的 10 大误区
PHP是一种非常流行的开源服务器端脚本语言,你在万维网看到的大多数网站都是使用php开发的.但是,你大概很奇怪的注意到有少部分的人发誓要离php 远远的.但是令人更奇怪的是或者很震惊的说他们不用php ...