我有一个使用ASIHTTP请求运行的下载队列。当用户按下主屏幕并且应用程序进入后台时,我希望此操作继续。我知道ASIHTTP请求可以在后台运行,但我希望运行ASIHTTP请求的进程也能在后台运行。
我该怎么做?
我在StackOverflow中看过这篇文章:Continuing a long running process in the background under iOS4
但解决方案是在iOS4中。我想在iOS5及以上版本中完成..
给出的解决方案:
UIApplication *app = [UIApplication sharedApplication];
if ([app respondsToSelector:@selector(beginBackgroundTaskWithExpirationHandler:)]) {
backgroundTaskIdentifier = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^{
dispatch_async(dispatch_get_main_queue(), ^{
if (backgroundTaskIdentifier != UIBackgroundTaskInvalid)
{
// you took too long - clean up what you can, then …
[app endBackgroundTask:backgroundTaskIdentifier];
backgroundTaskIdentifier = UIBackgroundTaskInvalid;
}
});
}];
}
另一个问题是我应该在哪里放置此代码。
需要一些指导......
答案 0 :(得分:0)
您在其他答案中找到的解决方案适用于iOS 4.0 及以上。它工作正常,并且在移动到后台时仍然the recommended way执行扩展任务。
此外,除非您尝试支持iOS 3.x - 这不再是可取的 - 您不需要respondsToSelector
检查。