iOSApp 的几个运行状态
下图展示了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 {
}