iOS生命周期状态
iOS应用的生命周期状态分为如下几种:
- Not Running (非运行状态) 应用尚未运行或者被系统终止
- Inactive (前台非运行状态) 应用正在进入前台状态,还不能接受事件处理
- Active (前台运行状态) 应用进入前台运行状态,可以接受用户事件处理
- Background (后台运行状态) 应用进入后台,依然能够执行代码。执行完之后将进入挂起状态
- Suspended(挂起状态) 被挂起的应用进入一种“冷冻状态” ,不能执行代码,若系统内存不足,应用会被终止。
在iOS应用的各种状态转换的过程中,iOS系统会回调应用程序的委托对象AppDelegate中的方法,并且能够发送相应的通知。主要的方法和通知如下:
方法 | 通知 | 说明 |
---|---|---|
application:didFinishLaunchingWithOptions: | UIApplicationDidFinishLaunchingNotification | 应用启动初始化时会调用该方法并发出通知,这个阶段会实例化根视图控制器 |
applictaionDidBecomeActive: | UIApplicationDidBecomeActiveNotification | 应用进入前台并且出去活动状态时调用该方法并发出通知,可以在这个方法里恢复UI的状态 |
applicationWillResignActive: | UIApplicationWillResignActiveNotification | 应用从活动状态进入到非活动状态是调用该方法并发出通知。可以在这个方法里保存UI状态 |
applicationDidEnterBackground: | UIApplicationDidEnterBackgroundNotification | 应用进入后台时调用该方法并发出通知,可以在这里保存用户数据,释放资源如数据库资源 |
applicationWillEnterForegound: | UIApplicationWillEnterForegoundNotification | 应用进入到前台,但是处于非活动状态会调用该方法,这个阶段可以恢复用户数据 |
applicationWillTerminate: | UIApplicationWillTerminateNotification | 应用被终止时调用该方法并发出通知,但是内存清除除外,可以在这里释放资源 或者保存用户数据 |
iOS应用各种状态切换的方法回调说明见下图
应用启动时的状态切换,对应图中的红线
Not Running -> Inactive -> Active
点击home键退出应用时的状态切换,对应图中的绿线
应用不可以后台执行时
Active -> Inactive -> Background -> Suspended -> Not Running
应用可以后台执行时
Active -> Inactive -> Background -> Suspended
挂起从新运行场景,对应图中的蓝线
Suspended -> Background -> Inactive -> Active
应用挂起后被清除时不会调用任何回调方法
清除包括系统内存不足的系统清除 和 用户从多任务列表中清除
注意:
- 应用是否可以在后台运行和挂起,由info.plist的属性Application dose not run in bakground属性决定,对应的键是UIApplicationExitsonSuspended。