iOS

iOSApp 的几个运行状态

持续更新中...

Posted by CoderLeonidas on September 22, 2018

iOSApp 的几个运行状态

下图展示了app的几种运行状态:

app的几种运行状态

简单说,App 有这样5种状态:

  • 未运行(not running):程序未运行
  • 未激活(active): 程序在前台运行,但是处于未激活状态,不接受事件
  • 激活(inactive):程序在前台运行,且处于激活状态,接受事件
  • 后台(background):程序退出前台,在后台运行
  • 挂起(suspended):程序在后台,仍然驻留在内存中,但是没有运行,内存告急时会被系统清理

UIApplication 中的状态属性

UIApplication中还有个属性applicationState,可以用来简单判断当前app处于什么状态。其枚举值定义如下:

1
2
3
4
5
6
typedef NS_ENUM(NSInteger, UIApplicationState) {
    UIApplicationStateActive, // 激活状态
    UIApplicationStateInactive, // 未激活状态
    UIApplicationStateBackground // 进入后台状态
} API_AVAILABLE(ios(4.0));

app 一旦运行起来,就存在以上三中状态。

  • UIApplicationStateActive

    应用程序在前台运行,当前正在接收事件。

  • UIApplicationStateInactive

    程序在前台运行但是不接受事件。这可能是由于中断引起的,或者是因为应用正在过渡到后台或从后台过渡而来。比如:

    a.下拉状态栏,看通知

    b.双击home键,下面弹出任务运行栏

    c.锁屏。应该程序也非后台状态。

  • UIApplicationStateBackground

    程序运行在后台。如:

    a.按home键

    b.启动其它应用,把当前应用挤入后

UIAppdelegate 中的监听方法

UIAppdelegate 中有以下几个方法,可以用来监听程序在各个状态之间的切换并做响应处理:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
// 即将失去活动状态(失去焦点, 不可交互)
- (void)applicationWillResignActive:(UIApplication *)application {
    
}

// 应用程序进入后台
// 一般在该方法中保存应用程序的数据, 以及状态
- (void)applicationDidEnterBackground:(UIApplication *)application {
    
}

// 应用程序即将进入前台
// 一般在该方法中恢复应用程序的数据,以及状态
- (void)applicationWillEnterForeground:(UIApplication *)application {
   
}

// 重新获取焦点(能够和用户交互)
- (void)applicationDidBecomeActive:(UIApplication *)application {
   
}

// 应用程序即将被销毁
// 注意:如果应用程序处于挂起状态的时候无法调用该方法
- (void)applicationWillTerminate:(UIApplication *)application {
    
}

// 应用程序接收到内存警告
// 一般在该方法中释放掉不需要的内存
- (void)applicationDidReceiveMemoryWarning:(UIApplication *)application {
}