有人可以在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;
});
我的理解是
具体来说,我打电话给NSLog后
[application endBackgroundTask: background_task];
background_task = UIBackgroundTaskInvalid;
任务将被终止,并且不会调用expirationHandler块。
我也认为我的理解不正确......
答案 0 :(得分:2)
除了一个重要细节外,关于你帖子的一切基本上都是正确的。这些都与applicationDidEnterBackground
app delegate方法无关。
应用中可能需要几秒钟的任何任务都应包含在对beginBackgroundTaskWithExpirationHandler
和endBackgroundTask
的调用中。
在这两种方法中包装代码的重点是通知操作系统您有一些需要继续运行的处理,即使应用程序在运行时碰巧进入后台也是如此。如果没有这些块,您的应用程序将在尝试在后台运行几(10?)秒后被操作系统杀死。