我有一个调度队列,其中有一些工作。当应用程序进入后台时,我希望队列继续运行,直到时间用完或队列耗尽。我将如何设置 UIBackgroundTaskIdentifier?
我需要像这样将它放入调度块吗?
dispatch_async(queue, ^{
if (_bgTask == UIBackgroundTaskInvalid) {
if ([UIDevice currentDevice].multitaskingSupported) {
_bgTask = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^(void) {
if (_bgTask != UIBackgroundTaskInvalid) {
[[UIApplication sharedApplication] endBackgroundTask:_bgTask];
_bgTask = UIBackgroundTaskInvalid;
}
}];
}
}
...
...
if (_bgTask != UIBackgroundTaskInvalid) {
[[UIApplication sharedApplication] endBackgroundTask:_bgTask];
_bgTask = UIBackgroundTaskInvalid;
}
});
我认为上面发生的事情是在队列实际运行块之前它没有注册为长时间运行的任务。那么我是否需要将代码的后台部分放在块之外,以便它在实际排队之前执行?