有人可以在 applicationDidEnterBackground 中解释执行顺序吗?
UIBackgroundTaskIdentifier background_task;
background_task = [application beginBackgroundTaskWithExpirationHandler: ^ {
[application endBackgroundTask: background_task];
background_task = UIBackgroundTaskInvalid;
}];
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
NSLog(@"\n\nRunning in the background!\n\n");
[application endBackgroundTask: background_task];
background_task = UIBackgroundTaskInvalid;
});
我的理解是
- 为后台任务创建标识符并分配将在时间(10 分钟左右)到期时调用的块
- dispatch async 方法,输出 NSLog。在此期间,可以使用应用程序的所有其他方法
- NSLog out 后立即终止后台任务,不等待系统默认过期
具体来说,在我调用 NSLog
[application endBackgroundTask: background_task];
background_task = UIBackgroundTaskInvalid;
任务将被终止,expirationHandler 块将不会被调用。
我也觉得我的理解有误...