1

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

另一个问题是我应该把这段代码放在哪里。

需要一些指导。

4

1 回答 1

0

您在另一个答案中找到的解决方案适用于 iOS 4.0及更高版本。它工作得很好,并且仍然是在移动到后台时执行扩展任务的推荐方式。

此外,除非您尝试支持 iOS 3.x——这不再那么可取了——否则您不需要respondsToSelector检查。

于 2013-03-26T05:56:29.930 回答