import “AppDelegate.h”
>> app 启动完成 程序准备开始运行
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { }
>> app 进入前台
- (void)applicationWillEnterForeground:(UIApplication *)application { }
>> app 进入活跃状态
- (void)applicationDidBecomeActive:(UIApplication *)application { }
<< app 进入非活跃状态 如:打开状态栏 来电话等等,只会调用此方法。不会调用进入后台
- (void)applicationWillResignActive:(UIApplication *)application { }
<< app 进入后台 会调用 (app 进入非活跃状态)的方法
- (void)applicationDidEnterBackground:(UIApplication *)application { }
<< app 即将推出
- (void)applicationWillTerminate:(UIApplication *)application { }
添加通知
app进入活跃状态
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(applicationBecomeActive) name:UIApplicationDidBecomeActiveNotification object:nil];
// app进入非活跃状态
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(applicationWillResignActive) name:UIApplicationWillResignActiveNotification object:nil];
// app进入前台
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(applicationWillEnterForeground) name:UIApplicationWillEnterForegroundNotification object:nil];
// app进入后台
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(applicationDidEnterBackground) name: UIApplicationDidEnterBackgroundNotification object:nil];
程序调用顺序
程序启动调用顺序:
1.app 启动完成 程序准备开始运行
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
2.app 进入活跃状态
- (void)applicationDidBecomeActive:(UIApplication *)application
打开状态栏调用顺序
1.app 进入非活跃状态
关闭状态栏调用顺序
1.app 进入活跃状态 「 有延迟 大约1s 」
进入后台调用顺序 --> 点击Home键
1.app 进入非活跃状态
- (void)applicationWillResignActive:(UIApplication *)application
2.app 进入后台
- (void)applicationDidEnterBackground:(UIApplication *)application
进入前台调用顺序
1.app 进入前台
- (void)applicationWillEnterForeground:(UIApplication *)application
2.app 进入活跃状态
- (void)applicationDidBecomeActive:(UIApplication *)application
双击Home键盘
1.app 进入非活跃状态
- (void)applicationWillResignActive:(UIApplication *)application
杀死app
1.app 进入非活跃状态
- (void)applicationWillResignActive:(UIApplication *)application
2.app 进入后台
- (void)applicationDidEnterBackground:(UIApplication *)application
3.app 即将推出
- (void)applicationWillTerminate:(UIApplication *)application
AppDelegate流程
1.程序入口
进入main函数,设置AppDelegate为代理
int main(int argc, char * argv[]) {
@autoreleasepool {
return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
}
}
原型:
UIApplicationMain(int argc, char *argv[], NSString *principalClassName, NSString *delegateClassName);
principalClassName (主要类名) 和 delegateClassName (委托类名)。
(1) 如果principalClassName是nil,那么它的值将从Info.plist去获取,如果Info.plist没有,则默认为UIApplication。principalClass这个类除了管理整个程序的生命周期之外什么都不做,它只负责监听事件然后交给delegateClass去做。
(2) delegateClass 将在工程新建时实例化一个对象。NSStringFromClass([AppDelegate class])
2.程序完成加载
[AppDelegate application:didFinishLaunchingWithOptions:]
3.创建UIWindows
@property (strong, nonatomic) UIWindow *window;//AppDelete.h自带的属性
4.程序被激活
[AppDelegate applicationDidBecomeActive:]
5.调用程序
安上述程序调用顺序调用程序
6.点击home键(模拟器点击command+shit+h时,手机相当于home键)
1.程序取消激活状态
[AppDelegate applicationWillResignActive:];
//一种是即将进入后台状态会调用此方法,还有可能是当有电话进来或短信进来或锁屏等情况下,这时应用程序挂起进入非活动状态,也就是手机界面还是显示着你当前的应用程序的窗口,只不过被别的任务强制占用了,
2.程序进入后台
[AppDelegate applicationDidEnterBackground:];
//指当前窗口不是你的App,大多数程序进入这个后台会在这个状态上停留一会,时间到之后会进入挂起状态(Suspended)。如果你程序特殊处理后可以长期处于后台状态也可以运行。
3.Suspended (挂起):
程序在后台不能执行代码。系统会自动把程序变成这个状态而且不会发出通知。当挂起时,程序还是停留在内存中的,当系统内存低时,系统就把挂起的程序清除掉,为前台程序提供更多的内存。
7.点击app进入再次程序
程序即将进入前台
[AppDelegate applicationWillEnterForeground:]
程序被激活
[AppDelegate applicationDidBecomeActive:];
===============================================
https://www.jianshu.com/p/01bcf1d2b5c1