按照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
这里需要注意的是,正常程序退出之后,会在几秒内停止工作,要想申请更长的时间,需要用到beginBackgroundTaskWithExpirationHandler
和endBackgroundTask
这两个需要成对出现。
下边这种写法会让程序多工作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;
}
});
网友评论