iOS程序生命周期流程
盛年不重来,一日难再晨。及时宜自勉,岁月不待人。
iOS系统资源是有限的,合理的去配置应用程序的运行状态以及了解app的生命周期对于大多数开发者来说是很重要的一件事情!在后台进行运行时app会受到系统的很多限制,但是也可以提高电池的使用和用户的体验。
1. 应用程序的运行状态
1.1)运行状态
- Not running 未运行状态,程序并没有进行启动时的状态;
- Inactive 未激活状态 ,程序在前台运行,但没有接收到任何事件。在程序没有事件需要处理时停留在这个状态,相当于程序休眠;
- Active 激活状态,程序在前台运行而且接受到事件,并对事件进行响应和处理。这也是前台的一个重要的状态;
- Background 后台状态,处于运行中的应用程序切换到后台时的状态,会在此状态保留一定时间,时间超过时就会进入应用程序的挂起状态,有的应用程序也可以根据需求使其长期进入后台状态;
- Suspended 挂起状态,此状态也是一种后台状态,于background的不同在于挂起状态的应用程序是不可以执行代码的,其特点是程序还是停留在内存中,当出现内存警告时iOS系统会首先把挂起的程序清除出内存并为处于前台运行状态的应用程序提供内存;
下面是程序运行状态的变化图

1.2)运行状态的代理回调方法
//程序即将启动完成
//对应未启动状态,告诉代理程序已经进入启动状态但是还没有进入未激活状态
-(BOOL)application:(UIApplication *)application willFinishLaunchingWithOptions:(NSDictionary *)launchOptions{
return YES;
}
//程序启动完成
//对应已经启动状态,准备进入前台开始运行状态,当没有接收到事件时则表示的是未激活状态
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
return YES;
}
//应用程序进入激活状态,应用程序可以接受事件并对其进行处
-(void)applicationDidBecomeActive:(UIApplication *)application{
}
//应用程序放弃了活动状态进入未激活状态,在此状态中应用程序无法接受事件进行处理
-(void)applicationWillResignActive:(UIApplication *)application{
}
//应用程序进入后台,在后台继续执行的代码在此可以进行处理即可
- (void)applicationDidEnterBackground:(UIApplication *)application {
}
//应用程序将要进入前台,包含两个状态未激活和激活状态
-(void)applicationWillEnterForeground:(UIApplication *)application{
}
//程序将要终止退出,用来保存一些数据和转状态,以及应用程序退出前的内存清理工作
-(void)applicationWillTerminate:(UIApplication *)application{
}
// 应用程序完成载入
- (void)applicationDidFinishLaunching:(UIApplication*)application{
}
有了这些回调,程序员就能很容易地捕捉应用程序当前的状态,从而做出处理。值得一提的是,在实际开发中,将所有的程序状态都放在AppDelegate中处理,并不是很方便。所以,也可以通过监听通知,获取到当前的程序状态。
UIKIT_EXTERN NSNotificationName const UIApplicationDidEnterBackgroundNotification NS_AVAILABLE_IOS(4_0);
UIKIT_EXTERN NSNotificationName const UIApplicationWillEnterForegroundNotification NS_AVAILABLE_IOS(4_0);
UIKIT_EXTERN NSNotificationName const UIApplicationDidFinishLaunchingNotification;
UIKIT_EXTERN NSNotificationName const UIApplicationDidBecomeActiveNotification;
UIKIT_EXTERN NSNotificationName const UIApplicationWillResignActiveNotification;
UIKIT_EXTERN NSNotificationName const UIApplicationWillTerminateNotification;
2. 应用程序的生命周期
2.1)加载进入前台的生命周期

应用程序进入前台的生命周期从图中可以看出包括启动时间,应用程序进入运行的时间,以及切换不同app时的时间。
应用程序的启动时间:从图中可以看出,应用程序的启动时间从我们触发app开始,然后到main函数执行,到加载mainUI文件,到第一次加载完成以及加载其他UI完成的时间并进入未激活状态所用的时间就是启动app时的启动时间
其代理方法的调用时间:
// 在第一次完成加载mainUI时进行加载
- (BOOL)application:(UIApplication *)application willFinishLaunchingWithOptions:(NSDictionary *)launchOptions
// 在完全加载成功UI时进入此方法通知app完成启动进入未激活状态
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
// 在应用程序处于运行状态时接受到事件时通知app进入激活状态
- (void)applicationDidBecomeActive:(UIApplication *)application
2.2)加载进入后台的生命周期

从上图可以看出,当应用程序启动后,进入后台时会有一个判断是否可以在后台运行,允许后台运行时会一直处于后台运行状态并执行某些代码操作,当不允许运行时会进入到挂起状态不可执行任何代码操作。当我们在返回前台运行时会通过代理方法通知app程序的运行状态从后台变为前台的未激活状态和激活状态。
iOS程序生命周期流程的更多相关文章
- 图解ios程序生命周期
图解ios程序生命周期 应用程序启动后状态有Active.Inactive.Background.Suspended.Not running这5种状态,几种状态的转换见下图: 在AppDelegate ...
- iOS程序生命周期 AppDelegate
iOS的应用程序的生命周期,还有程序是运行在前台还是后台,应用程序各个状态的变换,这些对于开发者来说都是很重要的. iOS系统的资源是有限的,应用程序在前台和在后台的状态是不一样的.在后台时,程序会受 ...
- (转)iOS应用程序生命周期(前后台切换,应用的各种状态)详解
原文:http://blog.csdn.net/totogo2010/article/details/8048652 iOS应用程序生命周期(前后台切换,应用的各种状态)详解 分类: ...
- 转:iOS应用程序生命周期(前后台切换,应用的各种状态)详解
iOS应用程序生命周期(前后台切换,应用的各种状态)详解 分类: iOS开发进阶2012-10-08 15:35 42691人阅读 评论(30) 收藏 举报 iosapplication任务anima ...
- iOS Application Life Cycle 应用程序生命周期
应用程序的状态 IOS的应用程序一共有5种状态. Not running(未运行):程序未启动 Inactive(未激活):其他两个状态切换时出现的短暂状态.唯一在此状态停留时间比较长的情况是:当用户 ...
- IOS应用程序生命周期&启动周期函数
—程序的生命周期 a.程序的生命周期是指应用程序启动到应用程序结束整个阶段的全过程 b.每一个IOS应用程序都包含一个UIApplication对象,IOS系统通过该U ...
- iOS学习笔记(四)——iOS应用程序生命周期
开发应用程序都要了解其生命周期,开始接触android时也是从应用程序生命周期开始的,android的应用程序生命周期更多是其组件的生命周期,例如Activity.Service.今天我们接触一下iO ...
- 【iOS开发-72】设置状态栏的两种方式、程序生命周期以及更好地理解几大类(对象)之间的关系
(1)设置状态栏的2种方式 --第一种方式就是我们在控制器中设置,系统默认就是交给视图控制器去管理的,这样不同视图控制器能够自己定义不同的状态栏例如以下: -(BOOL)prefersStatusBa ...
- (转)深入浅出 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:// ...
随机推荐
- Pandas: 将dataframe转换为dict
背景 将Dataframe的每一列数据转换成字典并保存.也就是字段名变为key, 数值变为value. 方案 以下是效果图 参考链接 https://blog.csdn.net/hanyunkaka/ ...
- 去中心化组件共享方案 —— Webpack Module Federation(模块联邦)
在大型应用中, 我们可能会对其进行拆分,分成容器.主应用和多个子应用,使拆分后的应用独立开发与部署,更加容易维护.但无论是微应用.公共模块应用,都需要放到容器中才能使用. 如果多个应用之间希望资源共享 ...
- 使用supervisor守护freeswitch进程
一.安装supervisor yum install -y epel-release yum install -y supervisor systemctl start supervisord sys ...
- [ABC212E] Safety Journey
2023-01-08 题目 题目传送门 翻译 翻译 难度&重要性(1~10):2 题目来源 AtCoder 题目算法 dp 解题思路 首先就想到暴力 dp,用三个循环枚举:\(1.\) 时间, ...
- 一次搞定:借助Hutool封装代码快速解决webservice调用烦恼
前言 相信很多同行哪怕学了许多主流技术,但工作上依然免不了和传统企业打交道,而这样的企业往往还在用webservice做接口交互. 本文是作者近两年和医疗行业的厂家打交道研究出来的一点调用webser ...
- trino on yarn
一.前言 最近在研究trino on yarn 功能,网上大部分都是关于presto on yarn文章,关于trino on yarn 资料很少,但是本质上差不多,需要修改一些内容比,主要在调试方面 ...
- 深入理解Linux内核——内存管理(4)——伙伴系统(1)
提要:本系列文章主要参考MIT 6.828课程以及两本书籍<深入理解Linux内核> <深入Linux内核架构>对Linux内核内容进行总结. 内存管理的实现覆盖了多个领域: ...
- 4399 Flash游戏专用浏览器, 无需安装Flash插件
目前所有的主流浏览器都已经不再支持Flash了,即使有一些国内浏览器还支持flash,但只能安装国内特供版Flash Player. 但问题的关键在于,这个国内特供版跟 Adobe 海外发行的版本是两 ...
- 使用 Sealos 一键部署高可用 MinIO,开启对象存储之旅
大家好!今天这篇文章主要向大家介绍如何通过 Sealos 一键部署高可用 MinIO 集群. MinIO 对象存储是什么? 对象是二进制数据,例如图像.音频文件.电子表格甚至二进制可执行代码.对象的大 ...
- 【matplotlib基础】--样式表
Matplotlib库 由于诞生的比较早,所以其默认的显示样式很难符合现在的审美,这也是它经常为人诟病的地方. 不过,经过版本更迭之后,现在 Matplotlib 已经内置了很多样式表,通过使用不同的 ...