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:// ...
随机推荐
- 【教程】青少年CTF机器人使用教程
前言 本期教程适用于版本号为2.0.1-Beta的青少年CTF机器人,其他版本可能与当前版本不同. 由于之前版本的机器人重构,所以我们细化了本次的机器人逻辑,并且对机器人的功能进行了一些升级. 机器人 ...
- Maven资源导出问题所需配置
<!--在build中配置resources,来防止我们资源导出失败的问题--> <build> <resources> <resource> < ...
- .Net Web API 006 Controller上传大文件
1.上传大文件的方式 上传大文件就需要一段一段的上传,主要是先在客户端获取文件的大小,例如想一次传256kb,那就按照256kb分割.分割后又两种上传方式. (1)逐个数据段读取,然后调用API上传, ...
- 如何提升 API-First 设计流程
一个 API-First 设计应该具有可复用性.互操作性.可修改性.用户友好性.安全性.高效性.务实性,并且重要的是,与组织目标保持一致.这些基本特征将确保 API 能够有效地为 API- First ...
- SpringBoot3进阶用法
标签:切面.调度.邮件.监控: 一.简介 在上篇<SpringBoot3基础>中已经完成入门案例的开发和测试,在这篇内容中再来看看进阶功能的用法: 主要涉及如下几个功能点: 调度任务:在应 ...
- ETL之apache hop数据增量同步功能
ETL增量数据抽取CDC 概念:Change Data Capture,变化的数据捕获,也称:[增量数据抽取](名词解释) CDC是一种实现数据的增量抽取解决方案,是实现[ETL整体解决方案]中的一项 ...
- Auto-GPT免费尝鲜之初体验-使用攻略和总结
写在前面的废话 ChatGPT 的交互模式,是和一个 "人" 对话聊天. 如果你想了解更多ChatGPT和AI绘画的相关知识,请参考:ChatGPT注册和变现思路,AI绘画教程汇总 ...
- 机器学习-评价指标-AUCROC
The Area Under the Receiver Operating Characteristic (AUC-ROC) curve is a performance metric commonl ...
- 如何调用API接口获取商品数据
在当今数字化的时代,电子商务的崛起使得网购成为了人们生活中不可或缺的一部分.作为电子商务中最为熟知和流行的平台之一,拥有大量的商品资源和用户群体.如果你是一名开发者或者是对数据分析感兴趣的人,你可能会 ...
- 接口自动化测试项目 | IHRM登录接口自动化测试
项目内容如下: ### 需求- 地址:http://ihrm-java.itheima.net/#/login- 测试接口: - 登录接口:针对登录的13个cases### 技术 - V1:pytho ...