第四部分,UIApplicationDelegate。

主要介绍在 AppDelegate 中 UIApplicationDelegate 的 6 个代理方法,在不同场景中的调用顺序。

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
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
NSLog(@"应用启动完成:%s", __func__);
return YES;
}

// 可以大致理解为:applicationDidEnterForeground,应用已经进入前台。
- (void)applicationDidBecomeActive:(UIApplication *)application {
NSLog(@"已经获得焦点:%s", __func__);
}

// 可以大致理解为:applicationWillEnterBackground,应用将要进入后台。
- (void)applicationWillResignActive:(UIApplication *)application {
NSLog(@"将要释放焦点:%s", __func__);
}

- (void)applicationDidEnterBackground:(UIApplication *)application {
NSLog(@"已经进入后台:%s", __func__);
}

- (void)applicationWillEnterForeground:(UIApplication *)application {
NSLog(@"将要进入前台:%s", __func__);
}

- (void)applicationWillTerminate:(UIApplication *)application {
NSLog(@"应用将要退出:%s", __func__);
}

应用启动

应用安装完成后启动。

1
2
3
4
5
// 首先调用,且在整个应用的生命周期中只会被调用一次。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions;

// 紧接着调用,应用已经获取焦点。
- (void)applicationDidBecomeActive:(UIApplication *)application;

应用从前台退到后台

应用处于前台,单击 Home 键,返回桌面。

1
2
3
4
5
// 首先调用,应用将要失去焦点。
- (void)applicationWillResignActive:(UIApplication *)application;

// 约过 1s 左右调用,应用已经进入后台。
- (void)applicationDidEnterBackground:(UIApplication *)application;

应用在后台未被 kill,点击应用图标进入或者双击 Home 键选择应用进入。

1
2
3
4
5
// 首先调用,应用将要进入前台。
- (void)applicationWillEnterForeground:(UIApplication *)application;

// 约过 1s 左右调用,应用已经获取焦点。
- (void)applicationDidBecomeActive:(UIApplication *)application;

应用在前台,双击 Home 键,再选择本应用返回。

1
2
3
4
5
// 双击 Home 键调用,应用将要失去焦点。
- (void)applicationWillResignActive:(UIApplication *)application;

// 再选择本应用返回调用,应用已经获取焦点。
- (void)applicationDidBecomeActive:(UIApplication *)application;

应用在前台,双击 Home 键,再切换其他应用。

1
2
3
4
5
// 双击 Home 键调用,应用将要失去焦点。
- (void)applicationWillResignActive:(UIApplication *)application;

// 再切换其他应用调用,应用已经进入后台。
- (void)applicationDidEnterBackground:(UIApplication *)application;

应用在前台,双击 Home 键,再 kill 应用。

1
2
3
4
5
6
7
8
// 双击 Home 键调用,应用将要失去焦点。
- (void)applicationWillResignActive:(UIApplication *)application;

// 再 kill 应用,先调用,应用已经进入后台。
- (void)applicationDidEnterBackground:(UIApplication *)application;

// 再 kill 应用,最后调用,应用将要结束进程。
- (void)applicationWillTerminate:(UIApplication *)application;

应用在桌面或其他应用的前台,双击 Home 键,再 kill 应用。

1
2
// 此时应用已经处于后台,所以只会调用应用将要结束进程。
- (void)applicationWillTerminate:(UIApplication *)application;

应用在前台,下拉通知栏或上拉控制中心。

1
2
// 下拉通知栏或上拉控制中心会调用,应用将要失去焦点。
- (void)applicationWillResignActive:(UIApplication *)application;

应用在前台,已经处于下拉通知栏或上拉控制中心状态下,上拉通知栏或下拉控制中心。

1
2
// 上拉通知栏或下拉控制中心调用,应用已经获取焦点。
- (void)applicationDidBecomeActive:(UIApplication *)application;

Reference