热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

iOS应用生命周期详解

本文详细介绍了iOS应用的生命周期,包括各个状态及其转换过程中的关键方法调用。

最近阅读了关东升老师的iOS开发书籍,记录了一些关于iOS应用生命周期的重要知识点。

作为应用的代理对象,AppDelegate在应用生命周期的不同阶段会触发特定的方法调用。

以下是iOS应用的五个基本状态:

  • 未运行(Not Running):应用尚未启动或已被终止。
  • 非活跃(Inactive):应用已处于前台但尚未准备好接收事件。
  • 活跃(Active):应用处于前台并可以接收和处理用户事件。
  • 后台(Background):应用退至后台但仍可执行有限的操作。
  • 挂起(Suspended):应用在后台停止所有操作,等待被系统回收。

在这些状态之间转换时,iOS系统会通过调用AppDelegate中的相应方法来管理应用的行为,并发送相关通知。

下面列举几个关键的方法及其作用:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions:应用启动并完成初步设置时调用。

- (void)applicationWillResignActive:(UIApplication *)application:应用即将从活跃状态变为非活跃状态时调用。

- (void)applicationDidEnterBackground:(UIApplication *)application:应用进入后台时调用。

- (void)applicationWillEnterForeground:(UIApplication *)application:应用即将从前台恢复到活跃状态前调用。

- (void)applicationDidBecomeActive:(UIApplication *)application:应用成为活跃状态时调用。

- (void)applicationWillTerminate:(UIApplication *)application:应用即将被终止时调用。

这些方法在AppDelegate.m文件中默认生成,开发者可以根据需要重写这些方法以实现特定功能。

启动流程

当应用启动时,它将依次经过以下状态变化:未运行 -> 非活跃 -> 活跃。

在未运行到非活跃的过程中,系统会调用:

(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions。

而在非活跃到活跃的转变中,系统会调用:

(void)applicationDidBecomeActive:(UIApplication *)application。

Home键点击后的退出流程

根据应用是否支持后台运行,此过程分为两种情况:

1. 支持后台运行的应用:活跃 -> 非活跃 -> 后台 -> 挂起。

2. 不支持后台运行的应用:活跃 -> 非活跃 -> 后台 -> 挂起 -> 未运行。

对于第一种情况,在活跃到非活跃的转换中,系统会调用:

(void)applicationWillResignActive:(UIApplication *)application。

而后在后台到挂起的转换中,系统会调用:

(void)applicationDidEnterBackground:(UIApplication *)application。

对于第二种情况,当应用从挂起到未运行状态时,系统会调用:

(void)applicationWillTerminate:(UIApplication *)application。

从挂起状态恢复

当应用从挂起状态恢复时,它将依次经过以下状态变化:挂起 -> 后台 -> 非活跃 -> 活跃。

在后台到非活跃的转换中,系统会调用:

(void)applicationWillEnterForeground:(UIApplication *)application。

而在非活跃到活跃的转换中,系统会调用:

(void)applicationDidBecomeActive:(UIApplication *)application。

因内存不足导致的应用终止

当应用处于后台挂起状态,且系统内存不足时,系统可能会终止该应用以释放内存资源。此时,应用将直接从挂起状态变为未运行状态,而不会调用任何方法。


推荐阅读
  • 材料光学属性集
    材料光学属性集概述了材料在不同光谱下的光学行为,包括可见光透射率、太阳光透射率等关键参数。 ... [详细]
  • 如何在PHP中安装Xdebug扩展
    本文介绍了如何从PECL下载并编译安装Xdebug扩展,以及如何配置PHP和PHPStorm以启用调试功能。 ... [详细]
  • importjava.io.*;importjava.util.*;publicclass五子棋游戏{staticintm1;staticintn1;staticfinalintS ... [详细]
  • 解决Visual Studio Code中PHP Intelephense误报问题
    PHP作为一种高度灵活的编程语言,其代码结构可能导致Intelephense插件在某些情况下报告不必要的错误或警告。自1.3.3版本起,Intelephense引入了多个配置选项,允许用户根据具体的工作环境和编程风格调整这些诊断信息的显示。 ... [详细]
  • 在处理大数据量的SQL分页查询时,通常需要执行两次查询来分别获取数据和总记录数。本文介绍了一种优化方法,通过单次查询同时返回分页数据和总记录数,从而提高查询效率。 ... [详细]
  • 本文通过一个具体的实例,介绍如何利用TensorFlow框架来计算神经网络模型在多分类任务中的Top-K准确率。代码中包含了随机种子设置、模拟预测结果生成、真实标签生成以及准确率计算等步骤。 ... [详细]
  • 本文详细探讨了BCTF竞赛中窃密木马题目的解题策略,重点分析了该题目在漏洞挖掘与利用方面的技巧。 ... [详细]
  • 题目编号:2049 [SDOI2008]Cave Exploration。题目描述了一种动态图操作场景,涉及三种基本操作:断开两个节点间的连接(destroy(a,b))、建立两个节点间的连接(connect(a,b))以及查询两节点是否连通(query(a,b))。所有操作均确保图中无环存在。 ... [详细]
  • 使用Echarts for Weixin 小程序实现中国地图及区域点击事件
    本文介绍了如何使用Echarts for Weixin在微信小程序中构建中国地图,并实现区域点击事件。包括效果展示、条件准备和逻辑实现的具体步骤。 ... [详细]
  • 探索AI智能机器人自动盈利系统的构建
    用户可通过支付198元押金及30元设备维护费租赁AI智能机器人,推荐他人加入可获得相应佣金。随着推荐人数的增加,用户将逐步解锁更高版本,享受更多收益。 ... [详细]
  • 本文将从基础概念入手,详细探讨SpringMVC框架中DispatcherServlet如何通过HandlerMapping进行请求分发,以及其背后的源码实现细节。 ... [详细]
  • Windows操作系统提供了Encrypting File System (EFS)作为内置的数据加密工具,特别适用于对NTFS分区上的文件和文件夹进行加密处理。本文将详细介绍如何使用EFS加密文件夹,以及加密过程中的注意事项。 ... [详细]
  • 回顾两年前春节期间的一个个人项目,该项目原本计划参加竞赛,但最终作为练习项目完成。独自完成了从编码到UI设计的全部工作,尽管代码量不大,但仍有一定的参考价值。本文将详细介绍该项目的背景、功能及技术实现。 ... [详细]
  • 本文介绍了一个使用mii-tool工具检查网络接口状态的Bash脚本,并将结果记录到日志文件中。 ... [详细]
  • 本文探讨了如何在Windows程序中实现高精度的定时控制,特别是针对需要精确控制发包频率的应用场景,如“小兵以太网测试仪”。 ... [详细]
author-avatar
不要破网名_329
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有