作者:不要破网名_329 | 来源:互联网 | 2024-11-20 23:23
最近阅读了关东升老师的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。
因内存不足导致的应用终止
当应用处于后台挂起状态,且系统内存不足时,系统可能会终止该应用以释放内存资源。此时,应用将直接从挂起状态变为未运行状态,而不会调用任何方法。