iOS通过后台标识使程序在后台长久运行

正常情况下,当应用被按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不会打印。

你可能感兴趣的:(Objective-C)