iOS应用的五种状态
1、Not running (非运行状态)。应用没有运行或被系统终止。
2、Inactive(前台非活动状态)。应用正在进入前台状态,但是还不能接受事件处理。
3、Active(前台活动状态)。应用进入前台状态,能接受事件处理。
4、Background(后台状态)。应用进入后台后,依然能够执行代码。如果有可执行的代码,就会执行代码,如果没有可执行的代码或者将可执行的代码执行完毕,应用会马上进入挂起状态。
5、Suspended(挂起状态)。被挂起的应用进入不能执行代码的状态。如果系统内存不够,应用汇被终止。
在应用状态改变的过程中,iOS系统会回调AppDelegate中的一些方法,并发送一些通知。应用的生命周期中用到的方法和通知很多,如下:
方法 | 说明 |
application:didFinishLaunchingWithOptions: | 应用启动并进行初始化时会调用该方法并发出通知。这个阶段会实例化根视图控制器 |
applicationDidBecomeActive: | 应用进入前台并处于活动状态时调用该方法并发出通知。这个阶段可以恢复UI的状态(例如游戏状态等) |
applicationDidEnterBackground: | 应用从活动状态进入到非活动状态时调用该方法并发出通知。这个阶段可以保存UI的状态(例如游戏状态等) |
applicationDidEnterBackground: | 应用进入后台时调用该方法并发出通知。这个阶段可以保存用户数据,释放一些资源(例如释放数据库资源等) |
applicationWillEnterForeground: | 应用进入到前台,但是还没有处于活动状态时调用该方法并发出通知。这个阶段可以恢复用户数据 |
applicationWillTerminate: | 应用被终止时调用该方法并发出通知,但内存清除时除外。这个阶段释放一些资源,也可以保存用户数据 |
场景说明
1、非运行状态——应用启动场景
描述:用户点击应用图标的时候,可能是第一次启动应用,也可能是应用终止后再次启动。该场景的状态改变过程,如下图,共经理两个阶段三个状态Not running->Inactive->Active。
(1)Not running->Inactive阶段:调用application:didFinishLaunchingWithOptions:方法,发出UIApplicationDidFinishLaunchingNotification通知。
(2)Inactive->Active阶段:调用applicationDidBecomeActive:方法,发出UIApplicationDidBecomActiveNotification通知。
2、点击Home建——应用退出场景
描述:应用处于运行状态(Active状态),点击Home键应用汇腿粗。该场景的状态变化过程可以分两种情况。可以在后台运行或挂起,不可以在后台运行或挂起。根据工程属性文件(Info.plist)中的属性Application does not run inbackground(如下图)的设置,我们可以控制着两个状态。如果采用文本编辑器打开Info.plist文件,该设置项对应的键是UIApplicationExitsOnSuspend。
当状态为在后台运行或挂起时:该场景的状态变化如下图,共经理3个阶段4个状态:Active->Inactive->Background->Suspended。
(1)Active->Inactive阶段:调用applicationWillResignActive:方法,发出UIApplicationWillResignActiveNotification通知。
(2)Inactive->Background阶段:应用从非活动状态进入到后台。
(3)Background->Suspended阶段:调用applicationDidEnterBackground:方法,发出UIApplicationDidEnterBackgroundNotification通知。
当状态不可以在后台运行或者挂起时:其状态改变如下图,共经理4个阶段5个状态:Active->Inactive->Background->Suspended->Not running。
(1)Active->Inactive:阶段应用活动状态转为非活动状态
(2)Inactive->Background阶段:应用从非活动状态进入到后台
(3)Background->Suspended阶段:调用applicationDidEnterBackground:方法,发出UIApplicationDidEnterBackgroundNotification通知。
(4)Suspended->Not running阶段:调用applicationWillTerminate:方法,发出UIApplicationWillTerminateNotification通知。
iOS4之后(包括iOS4),操作系统支持多任务处理,按下Home键时应用汇进入到后台但不会中断(内存不够的情况除外)。
应用在后台也可以进行一部分工作,处理完成后进入挂起状态。3、挂起重新运行场景
描述:挂起状态的应用重新运行。该场景的状态改变如下图,共3个阶段4个状态:Suspended->Background->Inactive->Active。
(1)Suspended->Background阶段:应用从挂起状态进入后台
(2)Background->Inactive阶段:调用applicationDidBecomeActive:方法,发出UIApplicationWillEnterForegroundNotification通知。
(3)Inactive->Active阶段:调用applicationDidBecomeActive:方法,发出UIApplicationDidBecomeActiveNotification通知。
4、内存清除,应用终止场景
描述:应用在后台处理完成时进入挂起状态(休眠状态),如果这时发出低内存警告,为了满足其他应用对内存的需要,该应用就会从内存中清除从而终止运行。该场景状态如下图。
内存清除的时候应用终止运行。内存清除有两种情况,可能是系统强制清除内存,也可能是由使用者从人物中手动清除。内存清除后如果应用再次运行,上一次的云翔状态不会被保存,相当于应用第一次运行。
在内存清除场景下,应用不会调用任何方法,也不会发出任何通知。
参考资料
《IOS开发指南 从HELLO WORLD到APP STORE上架 第5版》