在iOS5及更高版本的后台运行一个漫长的过程

时间:2013-03-26 04:50:23

标签: ios ios5 ios6 background-process

我有一个使用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;
            }
        });
    }];
}

另一个问题是我应该在哪里放置此代码。

需要一些指导......

1 个答案:

答案 0 :(得分:0)

您在其他答案中找到的解决方案适用于iOS 4.0 及以上。它工作正常,并且在移动到后台时仍然the recommended way执行扩展任务。

此外,除非您尝试支持iOS 3.x - 这不再是可取的 - 您不需要respondsToSelector检查。