正常情况下,当应用被按Home键退出后,应用仅有最多5秒钟的时间做一些保存或者清理资源的工作。但是应用可以调用UIApplication的beginBackgroundTaskWithExpirationHandler方法,让应用在后台长久的运行。
让程序在后台长久运行的示例代码如下:
@interface AppDelegate : UIResponder <UIApplicationDelegate>
@property (strong, nonatomic) UIWindow *window;
@property (nonatomic, assign) UIBackgroundTaskIdentifier backgroundTask;//后台任务标识符
@end
@implementation AppDelegate
- (void)applicationDidEnterBackground:(UIApplication *)application {
NSLog(@"已经进入后台");
[self beginBackgroundTask];
//需要运行的代码
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(10 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
NSLog(@"我还在哦");
[self endBackgroundTask];
});
}
- (void)beginBackgroundTask {
self.backgroundTask = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^{
//如果系统觉得我们还是运行了太久,将执行这个程序块,并停止运行应用程序
[self endBackgroundTask];
}];
}
- (void)endBackgroundTask {
//告诉系统我们完成了
[[UIApplication sharedApplication] endBackgroundTask:self.backgroundTask];
self.backgroundTask = UIBackgroundTaskInvalid;
}
@end
如果不使用后台标识的话,GCD中的log不会打印。
网友评论