iOS App的生命周期

App的生命周期

App从启动到退出的过程中,iOS应用程序不断从系统接收各种事件,如:用户点击了屏幕、用户点击了Home键,并对这些事件进行响应。接受事件是UIApplication对象的工作,但是,响应事件就需要由程序员编写的代码来处理。为了理解事件响应需要在哪里处理,就必须对iOS应用程序的整个生命周期和事件周期有所了解。

主函数main()

main()函数是每个iOS程序的入口,但在实际开发中,基本不需要在main()函数中进行额外的处理。在main中,最核心的功能就是把应用程序的控制权交给UIKit框架,其中UIApplicationMain函数主要完成以下3个工作:

  • 创建应用程序所需的核心对象
  • 读取storyboard文件,来加载用户界面
  • 调用自定义的代码,用来定制应用程序的启动过程
#import <UIKit/UIKit.h>
#import "AppDelegate.h"int main(int argc, char * argv[]) {NSString * appDelegateClassName;@autoreleasepool {// Setup code that might create autoreleased objects goes here.appDelegateClassName = NSStringFromClass([AppDelegate class]);}return UIApplicationMain(argc, argv, nil, appDelegateClassName);
}

应用程序的状态

在iOS4之后,苹果引入了多任务功能,因此,对于应用程序来说运行过程中就存在多种状态以及在不同状态之间的相互切换。应用程序一共存在下列五种状态,如图:
请添加图片描述

  • Not Running(未运行):应用程序未启动或者被终止。
  • Inactive(待激活):应用程序在前台运行,但是不能接收事件(UIEvent)。应用程序在不同状态之间切换时,经常会存在该状态。例如:在App显示启动页时,是从Not RunningActive的过程,中间会存在Inactive状态。
  • Active(激活,前台运行):应用程序在前台运行,可以接收事件(UIEvent)
  • Background(后台运行):应用程序处于后台并且正在执行代码。绝大多数应用程序在进入挂起状态时,会短暂经历这个状态。
  • Suspended(挂起):应用程序处于后台,并且不能执行代码。此时,当内存不足时,操作系统有可能会自动把挂起状态的应用程序移除,以便给处于Active状态的应用程序提供更多的内存空间。

应用程序的启动过程

当用户点击icon的时候,应用程序会经历:NotRunning→Inactive→Active的过程,如图所示。在这个过程中,AppDelegete对象的如下方法会被调用。

请添加图片描述

在实际开发过程中,假如不需要通过storyboard加载界面,那么就需要在di dFinishLaunchingWithOptions:方法中,设置window的根控制器。

请添加图片描述

应用程序从前台切换到后台

当用户点击Home键的时候,应用程序会经历Active → Background →Suspended过程。在这个时候,会调用AppDelegate对象中的application WillResignActive:以及applicationEnterBackgroud:方法。在实际的开发过程中,当用户点击Home键使用程序切换到后台时,需要在这些方法中对数据或者状态进行保存,如图所示。

请添加图片描述
默认状态下,applicationEnterBackgroud:大概有5秒事件来完成一些任务。假如说5秒的时间不够,则需要调用beginBackgroundTaskWithExpirationHandler:方法来申请更多的后台运行时间,后台运行的时间由backgroundTimeRemaining属性来确定。

请添加图片描述

应用程序从后台切换到前台

当应用程序从后台切换到前台时,会调用applicationWillEnterForeground:以及applicationDidBecomeActive:方法,如下图。

请添加图片描述

响应中断

当来电或者闹钟触发的时候,应用程序会触发中断,这时AppDelegate对象会先调用applicationWillResignActive:方法,当用户接听电话时,会直接跳转到电话程序;假如用户选择不接听电话,这时会返回应用程序,并调用applicationDidBecomeActive:方法,如图所示。

请添加图片描述

锁屏/解锁

当用户锁屏的时候,应用程序会调用AppDelegate对象的applicationWillResignActive:方法以及applicationDidEnterBackground:方法。当用户解锁后,应用程序会调用applicationWillEnterForeground:方法以及applicationDidBecomeActive:方法。

小结

要知道APP的生命周期,首先要了解一下生命周期的5种状态,结合状态理解生命周期的使用。

应用的状态包括:

  1. 未运行(Not running)
    程序没启动

  2. 未激活(Inactive)
    程序在前台运行,不过没有接收到事件。
    一般每当应用要从一个状态切换到另一个不同的状态时,中途过渡会短暂停留在此状态。唯一在此状态停留时间比较长的情况是:当用户锁屏时,或者系统提示用户去响应某些(诸如电话来电、有未读短信等)事件的时候。

  3. 激活(Active)
    程序在前台运行而且接收到了事件。这也是前台的一个正常的模式

  4. 后台(Backgroud)
    程序在后台而且能执行代码,大多数程序进入这个状态后会在在这个状态上停留一会。时间到之后会进入挂起状态(Suspended)。有的程序经过特殊的请求后可以长期处于Backgroud状态

  5. 挂起(Suspended)
    程序在后台不能执行代码。系统会自动把程序变成这个状态而且不会发出通知。当挂起时,程序还是停留在内存中的,当系统内存低时,系统就把挂起的程序清除掉,为前台程序提供更多的内存。

APP的生命周期就是UIApplicationDelegate中的回调方法,这些方法是根据状态变化进行响应的地方,其中最常用的就是以下7个方法:

application:willFinishLaunchingWithOptions:
在App启动时调用表示应用加载进程已经开始,常用来处理应用状态的存储和恢复
application:didFinishLaunchingWithOptions:
表示App将从未运行状态进入运行状态,用于对App的初始化操作
applicationDidBecomeActive:
当应用即将进入前台运行时调用
applicationWillResignActive:
当应用即将进从前台退出时调用
applicationDidEnterBackground:
当应用开始在后台运行的时候调用
applicationWillEnterForeground:
当程序从后台将要重新回到前台(但是还没变成Active状态)时候调用
applicationWillTerminate:

当前应用即将被终止,在终止前调用的函数。通常是用来保存数据和一些退出前的清理工作。如果应用当前处在suspended,此方法不会被调用。 该方法最长运行时限为5秒,过期应用即被kill掉并且移除内存。

参考:
iOS app生命周期
《iOS开发:从零基础到精通》

最后我们来看看chatGPT如何总结的:

在这里插入图片描述

int main(int argc, char * argv[]) {@autoreleasepool {return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));}
}- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];// 创建根视图控制器UIViewController *rootViewController = [[UIViewController alloc] init];self.window.rootViewController = rootViewController;// 显示主窗口[self.window makeKeyAndVisible];return YES;
}- (void)viewDidLoad {[super viewDidLoad];// 加载数据、配置视图等
}- (void)viewWillAppear:(BOOL)animated {[super viewWillAppear:animated];// 视图即将显示
}- (void)viewDidAppear:(BOOL)animated {[super viewDidAppear:animated];// 视图已经显示
}

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/35488.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

裁员10%,暴跌14%,这家IT独角兽正在被抛弃!

撰稿 | 言征 流量一跌再跌&#xff0c;Stack Overflow 简直被狠狠地上了一课&#xff01; 3 月份 Stack Overflow 的流量下降了近 14%。该公司的 CEO 压力空前&#xff0c;甚至昨天决定裁员 10%&#xff01; 平均每月下降6%&#xff0c;上月直接跌了近14% 开发人员越来越多地…

Uni-Mol: A Universal 3D Molecular Representation Learning Framework

Uni-Mol: 一个通用的三维分子表示学习框架 ICLR 2023 Uni-Mol 论文&#xff1a;Uni-Mol: A Universal 3D Molecular Representation Learning Framework | OpenReview Uni-Mol 代码&#xff1a;&#xff1a;GitHub - dptech-corp/Uni-Mol: Official Repository for the Uni-Mo…

港联证券|三条主线掘金数字经济概念

今年以来数字经济板块不断走强&#xff0c;截至5月24日收盘&#xff0c;数字经济板块累计涨幅超26%&#xff0c;大幅跑赢同期上证指数。概念板块中年内有173只个股期间实现上涨&#xff0c;占比超八成。中国科传、中科信息、鸿博股份涨幅超过200%&#xff0c;果麦文化、神州泰岳…

公务员备考(二十) 申论

好处:能有效保证销量。线上加线下方式销售,不仅销售到全国各地,还与十大果品市场合作,专人负责宣传销售。快递公司网上平台帮助销售,并配合开展宣传营销活动。

校招行测笔试--资料分析

面对校招笔试的行政能力测试&#xff08;简称“行测”&#xff09;环节&#xff0c;刚开始接触有些束手无策、摸不到头脑&#xff0c;其实是有技可循的&#xff0c;本文就帮助大家总结一下行测的相关技巧。如果对你有所帮助&#xff0c;记得关注笔者的公众号&#xff0c;干货满…

笔试技巧知多少 | 笔试备考指南

在上一期中&#xff0c;我们详细聊了聊如何高效通关的简历是啥样&#xff0c; 简历筛选通过&#xff0c;咱们已经向前迈进了第一步&#xff0c;下一步就要经历笔试了&#xff0c; 本期&#xff0c;学习君就带大家练练笔试技巧。 &#x1f4a1; 嘿&#xff0c;你知道吗 按照往年…

2023年系统分析师上午题

全国计算机技术与软件专业技术资格&#xff08;水平&#xff09;考试 2023年上半年 系统分析师 上午试卷 &#xff08;考试时间 9 : 00&#xff5e;11 : 30 共 150 分钟&#xff09; 1. 在答题卡的指定位置上正确写入你的姓名和准考证号&#xff0c;并用正规 2B 铅笔在你写入…

一政网:国考行测备考策略分析,这些很重要!

很多报考国考的小伙伴&#xff0c;对于国考延期&#xff0c;有很多自己的看法&#xff0c;有些考生认为延期对于自己的备考是有利的&#xff0c;还能够有更多的时间去备考&#xff0c;但对于其他的考生来说&#xff0c;未能够按照规定时间考试&#xff0c;对自己掌握的知识点和…

智公网:公务员行测基础考点

一、法律常识 1. 行政主体要“三有”&#xff0c;一有“权”&#xff08;行政权力&#xff09;&#xff0c;二有“名”&#xff08;以自己名义从事行政管理&#xff09;&#xff0c;三有“责”&#xff08;独立承担行政责任&#xff09;。 2. 受委托的组织和个人不具备行政主…

国考省考行测:问题型材料主旨分析,有问题有对策,主旨是对策,有问题无对策,要合理引申对策

国考省考行测&#xff1a;问题型材料主旨分析&#xff0c;有问题有对策&#xff0c;主旨是对策&#xff0c;有问题无对策&#xff0c;要合理引申对策 2022找工作是学历、能力和运气的超强结合体! 公务员特招重点就是专业技能&#xff0c;附带行测和申论&#xff0c;而常规国考…

PTE-SST预测题分类

目录 科学 科技工业 1.Sound Receptors 声音接收器 57. HTML 58. Sign language 符号语言 97. Automated vehicles 自动化汽车 99. Telescope 天文望远镜 116. The history of software 软件发展史 146. Industrial Revolution 工业革命 207. The internet requires …

运势运程星座运势算命程序源码公众号版小程序源码

功能模块&#xff1a; 1、首页Banner 轮播图 2、九宫格功能&#xff08;星座卡片、星座档案、单向历、姓名解析&#xff09; 3、星座运势 4、测算专区&#xff08;20多种测算栏目&#xff09; 5、测算栏目支持自定义热门测算 6、支持关注公众号组件 7、支持小程序流量主 8、支持…

[Android 课设] 一款星座运势查询APP(前言)

[Android 课设] 一款星座运势查询APP&#xff08;前言&#xff09; 前言 熬了几个夜&#xff0c;终于肝完了课设&#xff0c;今天答辩我是第四个&#xff0c;好家伙前面和后面全是大佬&#xff0c;就我一个简简单单连个登录注册都没有的不像APP的APP夹在中间&#xff0c;上去介…

使用okhttp请求聚合数据之星座运势

本篇数据来源&#xff1a;聚合数据&#xff0c;一个简单的例子&#xff0c;通过调用API接口进行数据解析后&#xff0c;加载到我们的模拟器中。开始之前我们要清楚做这个demo的一个具体步骤&#xff0c;下面我将一步步进行编写。 首先准备工作&#xff1a; 导入okhttp与Gson(…

Android星座运势

功能描述: App调用聚合数据&#xff0c;实现了12星座查询并显示今日运势、明日运势、本周运势、本月运势功能&#xff0c;同时可以按星座进行搜索&#xff0c;还可以查看实时新闻。适合新手学习聚合数据接口的调用与解析展示。 开发语言: java 技术框架: mvc 开发工具: …

2023最新在线星座运势网站开源源码+只作为参考

正文: 在线星座运势网站开源源码这里&#xff0c;提供了各种星座的最新运势预测&#xff0c;让你知道自己今天的运势如如何&#xff0c;有兴趣的自行去安装体验吧。 程序: wwxsgr.lanzouj.com/i0MXy0mkdcng 图片:

运势运程算命程序源码 星座运势公众号版源码+授权Token

内容目录 一、详细介绍二、效果展示1.部分代码2.效果图展示 三、学习资料下载 一、详细介绍 1、首页Banner 轮播图 2、九宫格功能&#xff08;星座卡片、星座档案、单向历、姓名解析&#xff09; 3、星座运势 4、测算专区&#xff08;20多种测算栏目&#xff09; 5、测算栏…

python星座分析

python数据分析 python数据分析是一个非常好用的&#xff0c;虽然python数据分析只是刚刚起步&#xff0c;有些功能还未开发完成&#xff0c;但是用来做数据分析是绰绰有余了&#xff0c;本人也是专门研究和学习python数据分析的。 星座数据爬虫 作为一个学习数据分析的人&a…

转:通信里 星座图 到底是什么

本文根据知乎的一篇文章整理而来。 要说星座图&#xff0c;要先从IQ调制说起&#xff1a; IQ调制&#xff1a; IQ解调原理&#xff1a; t-1:0.001:1; f1; ycos(2*pi*2*f*t); subplot(1,2,1);plot(t,y); ysin(2*pi*2*f*t); subplot(1,2,2);plot(t,y); 123456 前面我们讲了IQ…