iOS AppDelegate方法全解

按照app启动的调用顺序来写。

程序第一次启动只需要加载这两个方法

1、初始化

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 

2、程序变成激活状态

- (void)applicationDidBecomeActive:(UIApplication *)application

程序从前台进入后台

1、即将进入前台

- (void)applicationWillEnterForeground:(UIApplication *)application

2、变成激活状态

- (void)applicationDidBecomeActive:(UIApplication *)application

程序从后台进入前台

1、即将变成非激活状态

- (void)applicationWillResignActive:(UIApplication *)application

2、进入后台

- (void)applicationDidEnterBackground:(UIApplication *)application

程序在后台,双击home,上滑删除

1、程序终止

- (void)applicationWillTerminate:(UIApplication *)application

程序在激活装态,双击home,上滑删除

1、即将进入非激活状态

- (void)applicationWillResignActive:(UIApplication *)application

2、进入后台

- (void)applicationDidEnterBackground:(UIApplication *)application

3、程序终止

- (void)applicationWillTerminate:(UIApplication *)application

这里需要注意的是,正常程序退出之后,会在几秒内停止工作,要想申请更长的时间,需要用到beginBackgroundTaskWithExpirationHandlerendBackgroundTask这两个需要成对出现。
下边这种写法会让程序多工作10分钟
first在AppDelegate中增加属性

@property (nonatomic, assign) UIBackgroundTaskIdentifier task;

second在进入后台的代码中这样写

- (void)applicationDidEnterBackground:(UIApplication *)application{
    UIApplication *app = [UIApplication sharedApplication];
    _task = [app beginBackgroundTaskWithExpirationHandler:^{
        //关闭后台时执行的代码
        /* task = UIBackgroundTaskInvalid; */
        [[UIApplication sharedApplication] endBackgroundTask:_task];
        _task = UIBackgroundTaskInvalid;
    }];
}
// 如果没到10分钟,也可以主动关闭后台任务,但这需要在主线程中执行,否则会出错
dispatch_async(dispatch_get_main_queue(), ^{
    if (_task != UIBackgroundTaskInvalid)
       {
         // 和上面10分钟后执行的代码一样
        // if you don't call endBackgroundTask, the OS will exit your app.
         [application endBackgroundTask:_task];
        _task = UIBackgroundTaskInvalid;
      }
});

你可能感兴趣的:(iOS AppDelegate方法全解)