iOS – 应用程序状态切换整理

iOS中APP有五种状态:
Not Running: 未运行
Inaction: 前台非活动状态
Action: 前台活动状态
Background: 后台状态
Suspended: 挂起状态

当APP的状态改变时会往NotificationCenter发送通知,我们可以通过监听这些通知来完成相对应的操作

1. UIApplicationDidFinishLaunchingNotification

这个在AppDelegate也有对应的回调方法,在程序启动并进行初始化后触发,这个阶段应该进行根视图的创建。

2. UIApplicationDidBecomeActiveNotification

程序进入前台并处于活跃状态时触发,在这个时候APP进入活跃状态,可以被操作。

3. UIApplicationWillResignActiveNotification

与2相反,此时APP由活跃状态进入非活跃状态,注意此时不一定是在后台状态,也可能是在其他不可操作的状态。(后续介绍)

4. UIApplicationDidEnterBackgroundNotification

此时APP进入后台。

5. UIApplicationWillEnterForegroundNotification

此时程序进入前台,但还没有恢复到活跃状态时触发。

6. UIApplicationWillTerminateNotification

当一个长期处于挂起状态的程序,并且系统在内存不够用时,会将处于挂起状态的APP杀死,转换到未运行状态,此时可以可以做一些保存用户信息的操作等。


运行过程分析

为方便观察,已经将通知名称的前缀(UIApplication)省略

1. 程序启动

调用顺序:

  1. DidFinishLaunchingNotification 启动完成
  2. DidBecomeActiveNotification 处于前台并活跃的状态

2. 双击Home进入后台切换列表

APP成功启动后,首先进入Active,即活跃状态,用户可以进行操作,当用户双击Home(或3D Touch)进入后台列表时,会变成什么样子?

模拟进入后台列表

此时APP的通知顺序:

  1. WillResignActiveNotification APP离开Active状态

当进行这个操作时,APP仅由Active变为Inactive状态

3. 点按Home回到桌面 (或由上述2 切换到其他应用等离开本应用的操作)

此时APP会接收到两个通知:

  1. WillResignActiveNotification 取消活跃状态
  2. DidEnterBackgroundNotification 进入后台状态

4. 回到应用

这里分成两种方式回到应用:

第一种是在上述2操作下,从后台列表回到APP

此时的通知顺序:

  1. DidBecomeActiveNotification 进入活跃状态

第二种是在桌面或其他应用下回到APP

此时也会出现两个状态的变化:

  1. WillEnterForegroundNotification APP将要进入前台
  2. DidBecomeActiveNotification 进入活跃状态

综上所述,APP有几种状态的变化

  • (产生 -> 销毁)
  • (活跃 <-> 不活跃)
  • (前台 <-> 后台)

前台/后台状态发生改变的时候会顺带着活跃/不活跃状态的切换,但是活跃/不活跃状态的变化不一定由切换前后台导致的,所以在使用这些通知的时候,要按照需求对通知进行选择使用。