首先介绍一下各个方法触发的时机
- (
BOOL
)application:(
UIApplication
*)application didFinishLaunchingWithOptions:(
NSDictionary
*)launchOptions {
// Override point for customization after application launch.
// Override point for customization after application launch.
DebugLog(@"程序载入完成后执行");
//launchOptions 这个参数使用来表示app启动方式的
//launchOptions 这个参数使用来表示app启动方式的
//如果launchOptions为nil 则表示用户通过点击App图标正常启动的
return YES ;
}
-( void )applicationDidReceiveMemoryWarning:( UIApplication *)application{
DebugLog ( @" 系统内存不足 , 需要清理工作 " );
}
- ( void )applicationWillResignActive:( UIApplication *)application {
DebugLog ( @“ 程序即将进入非活动状态的时候执行此方法 , 即后台运行 ” );
return YES ;
}
-( void )applicationDidReceiveMemoryWarning:( UIApplication *)application{
DebugLog ( @" 系统内存不足 , 需要清理工作 " );
}
- ( void )applicationWillResignActive:( UIApplication *)application {
DebugLog ( @“ 程序即将进入非活动状态的时候执行此方法 , 即后台运行 ” );
/*
此方法执行的时机:
1)在单击Home键后,APP即将进入后台时,执行此方法
2)在下拉通知栏,或上拉工具栏时,执行此方法
3)双击Home键,切换任务栏时会执行此方法
4)应用间切换
*/
}
- ( void )applicationDidEnterBackground:( UIApplication *)application {
DebugLog ( @" 如果程序支持后台运行 , 则后台已进入后台运行 " ); // 如果需要退出后台 , 则加入 exit(0)
}
- ( void )applicationDidEnterBackground:( UIApplication *)application {
DebugLog ( @" 如果程序支持后台运行 , 则后台已进入后台运行 " ); // 如果需要退出后台 , 则加入 exit(0)
/*
此方法执行的时机:
1)在APP真正进入后台后,会触发该方法,通过单击Home键触发进入后台才会执行
2)应用间切换
*/
}
- ( void )applicationWillEnterForeground:( UIApplication *)application {
DebugLog ( @" 程序即将进入活动状态 , 即在进入前台之前 " );
/*
}
- ( void )applicationWillEnterForeground:( UIApplication *)application {
DebugLog ( @" 程序即将进入活动状态 , 即在进入前台之前 " );
/*
此方法执行的时机:
1)在APP真正从后台进入前台,会触发该方法,通过单击Home键触发进入后台,再进入前台后才会执行
2)应用间切换
*/
}
- ( void )applicationDidBecomeActive:( UIApplication *)application {
DebugLog ( @" 程序已进入活跃状态 , 即进入前台 ” );
}
- ( void )applicationDidBecomeActive:( UIApplication *)application {
DebugLog ( @" 程序已进入活跃状态 , 即进入前台 ” );
/*
此方法执行的时机:
1)在单击Home键后,APP即将进入后台再进前台时,执行此方法
2)在下拉通知栏,或上拉工具栏时,执行此方法
3)双击Home键,切换任务栏时会执行此方法
4)应用间切换
6)在每次APP启动的时候,在执行完didFinishLaunchingWithOptions 后执行
*/
}
- ( void )applicationWillTerminate:( UIApplication *)application {
DebugLog ( @" 程序即将退出 , 用于保存数据和清理工作 " );
/*
- ( void )applicationWillTerminate:( UIApplication *)application {
DebugLog ( @" 程序即将退出 , 用于保存数据和清理工作 " );
/*
此方法执行的时机:是在程序彻底退出时执行此方法,如双击home键杀死、系统因内存不足杀掉该程序进程
*/
}
-( void )applicationSignificantTimeChange:( UIApplication *)application{
DebugLog ( @" 系统时间发生改变的时候 " );
}
-( void )application:( UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:( NSData *)deviceToken{
// 推送消息时获取设备的 tokenID
}
- ( void )application:( UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:( nonnull NSError *)error{
//deviceToken 获取失败时做相应处理
}
-( void )application:( UIApplication *)application didReceiveRemoteNotification:( nonnull NSDictionary *)userInfo{
// 接收到推送消息
}
}
-( void )applicationSignificantTimeChange:( UIApplication *)application{
DebugLog ( @" 系统时间发生改变的时候 " );
}
-( void )application:( UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:( NSData *)deviceToken{
// 推送消息时获取设备的 tokenID
}
- ( void )application:( UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:( nonnull NSError *)error{
//deviceToken 获取失败时做相应处理
}
-( void )application:( UIApplication *)application didReceiveRemoteNotification:( nonnull NSDictionary *)userInfo{
// 接收到推送消息
}
为了便于理解,我把APP后后台状态分为两类:
1)单击Home键,或者从此APP通过连接或者推送通知跳转其他APP时,此APP只要没被系统杀掉进程,此时就处于后台运行的状态。四个方法都会按顺序触发:
applicationWillResignActive
—-
applicationDidEnterBackground——applicationWillEnterForeground—applicationDidBecomeActive(从前台切后台再到前台执行的顺序)
2)我把下拉通知栏,消息、短信的推送通知,上拉工具栏,双击home键切换任务栏看做一类,此类动作会导致APP进入一个区别于真正切入后台的状态,为了方便理解我称它为伪后台状态。此类状态在与前台状态切换时,只会触发applicationWillResignActive:和applicationDidBecomeActive两个方法.