(一)App的一些状态
一般App一种状态切换另一种状态来响应系统发生的事件有很多不同的状态:
- Not running:App还没运行
- Inactive:App运行在foreground但没有接收事件
- Active:App运行在foreground和正在接收事件
- Background:运行在background和正在执行代码
- Suspended:运行在background但没有执行代码
(二)App 在启动和结束等发生状态变化的代理方法delegate 和通知
application:willFinishLaunchingWithOptions: - 这个方法是你在启动时的第一次机会来执行代码
(1) 回调方法:application:didFinishLaunchingWithOptions:
- 本地通知:UIApplicationDidFinishLaunchingNotification
- 触发时机:程序启动并进行初始化的时候后。
- 适宜操作:这个阶段应该进行根视图的创建。
(2)回调方法:applicationDidBecomeActive:
- 本地通知:UIApplicationDidBecomeActiveNotification
- 触发时机:程序进入前台并处于活动状态时调用。
- 适宜操作:这个阶段应该恢复UI状态(例如游戏状态)。
(3)回调方法:applicationWillResignActive:
- 本地通知:UIApplicationWillResignActiveNotification
- 触发时机:从活动状态进入非活动状态。
- 适宜操作:这个阶段应该保存UI状态(例如游戏状态)。
(4)回调方法:applicationDidEnterBackground:
- 本地通知:UIApplicationDidEnterBackgroundNotification
- 触发时机:程序进入后台时调用。
- 适宜操作:这个阶段应该保存用户数据,释放一些资源(例如释放数据库资源)。
(5)回调方法:applicationWillEnterForeground:
- 本地通知:UIApplicationWillEnterForegroundNotification
- 触发时机:程序进入前台,但是还没有处于活动状态时调用。
- 适宜操作:这个阶段应该恢复用户数据。
(6)回调方法:applicationWillTerminate:
- 本地通知:UIApplicationWillTerminateNotification
- 触发时机:程序被杀死时调用。
- 适宜操作:这个阶段应该进行释放一些资源和保存用户数据。
(三)App的一些状态变换:
当App启动时:
首先由not running--->inactive状态,此时调用application:willFinishLaunchingWithOptions(第一次启动时调用)、
application:didFinishLaunchingWithOptions:方法;然后由inactive--->active状态,此时调用applicationDidBecomeActive:方法。
发送:UIApplicationDidBecomeActiveNotification
当App发生中断时:
由active--->inactive状态,此时调用applicationWillResignActive:方法。
当你点击iPhone的一次Home时或者手机锁屏时:
根据info.plist中Application does not run in background / UIApplicationExitsOnSuspend控制似乎否可以在后台运行或挂起。如果可以在后台运行或者挂起会经历
Active-->Inactive-->Background-->SuspendedActive-->Inactive
调用 applicationWillResignActive: 发送:UIApplicationWillResignActiveNotification
Background-->Suspended
调用 applicationDidEnterBackground: 发送:UIApplicationDidEnterBackgroundNotification如果不可以后台运行或挂起会经历
Active-->Inactive-->Background-->Suspended-->Not RunningBackground-->Suspended
调用 applicationDidEnterBackground: 发送:UIApplicationDidEnterBackgroundNotification
Suspended-->Not Running
调用 applicationWillTerminate: 发送:UIApplicationWillTerminateNotification
当你点击iPhone的两次Home时再打开APP:
Suspended-->Background-->Inactive-->Active
Background-->Inactive
调用 applicationWillEnterForeground: 发送:UIApplicationWillEnterForegroundNotification
Inactive-->Active
调用 applicationDidBecomeActive: 发送:UIApplicationDidBecomeActiveNotification
当内存不足,杀死程序
Background-->Suspended-->Not running
这种情况不会调用任何方法,也不会发送任何通知。