首页 > 代码库 > iOS App的状态

iOS App的状态

Refer: App States and Multitasking

iOS设备的系统资源有限,所以App在前台运行和在后台运行的时候是有区别的。为了节省电池寿命和用户体验,App在后台运行的时候,有一些功能会被操作系统限制。

当App在前台运行的时候,可以处理系统发送的touch事件。UIKit基础架构已经做了大部分的工作用来把事件分发到自定义的对象上,开发者只需要重写一些相应的方法。

在App的开发过程中建议遵守的方针:

(Required)对状态的切换做出适当的相应,否则可能会造成数据丢失和糟糕的用户体验。

(Required)当App切换到后台运行模式时,要确保App调整一些行为。

(Recommended)注册所有的App状态改变的消息通知。当App挂起的时候,操作系统会把关键的消息通知加入队列,并在App恢复运行的时候分发给App。可以利用这些通知让App平滑的切换到运行状态。

(Optional)如果App要在后台做一些实际的工作,可以向操作系统请求相应的权限来继续运行。

 

管理App的状态切换

App有以下5种状态,操作系统运行过程中,一些中断操作例如按了HOME键,或者来电了,这时候都会切换当前运行的App的状态。

Not Running  App没有被打开,或者在运行过程中被操作系统终止掉了

Inactive    App在前台运行,但是暂时没有接收到任何事件。这个状态通常比较短暂,很快会被切换到另外的状态

Active     App在前台运行,并且接收到事件。App通常运行在这种状态下

Background  App在后台运行并执行代码,App被挂起的时候会短暂的停留在这种状态下,App可以向系统请求更长的时间保持这种状态

Suspended  App切换到后台,不执行任何代码。操作系统在不做任何通知的前提下自动把App切换到这种状态。App在挂起的时候,还会驻留在内存中,当空闲内存过低的时候,操作系统可能会把该App从内存中清理掉。

 

 

App状态切换过程中,以下事件会被调用

application:willFinishLaunchingWithOptions:   应App刚打开的时候调用

application:didFinishLaunchingWithOptions:  App被展示之前调用该事件作一些初始化工作

applicationDidBecomeActive:  App被切换到前台状态的预处理

applicationWillResignActive:   App从前台状态切换到其他状态时执行

applicationDidEnterBackground:   App切换到后台,并且可能随时被挂起

applicationWillEnterForeground:   App从后台切换到前台,但是还没有Active

applicationWillTerminate:   App被终止,在App被挂起的时候会调用该方法