6

我想知道当用户锁定和解锁 iPad 屏幕时幕后发生了什么。我有一个使用 NSURLConnection 下载文件的应用程序,下载失败并出现 SOAP 错误(“找不到具有指定主机名的服务器”),但不是在用户锁定屏幕时,而是在解锁屏幕时。无论何时弹出错误,下载都不会完成。任何想法为什么以及可以做些什么?

NSMutableURLRequest* request = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:300];

NSURLConnection* conn = [[NSURLConnection alloc] initWithRequest: request delegate: self];

据我所知,当我点击主页按钮时,我得到:

applicationWillResignActive
applicationDidEnterBackground

三分钟后我回忆起该应用程序后,我得到:

applicationWillEnterForeground

并且下载要么已经完成,要么甚至在后台进行。

当我将它留在后台更长时间(5 分钟)时,它会因错误而超时。

当我锁定屏幕时,我得到相同的应用程序状态顺序,但还有一条关于下载断开的错误消息。

谢谢!

4

1 回答 1

6

我的猜测是您的连接正在断开,因为它在应用程序进入后台时正在运行,并且您没有正确的实现来保持它运行。也许你应该看看 Apple 的Background Execution and Multitasking文档。它将向您展示如何让您的应用程序在后台运行长达约 10 分钟而不会被终止。查找以下示例代码并了解它如何解决您的问题:

- (void)applicationDidEnterBackground:(UIApplication *)application
{
    bgTask = [application beginBackgroundTaskWithExpirationHandler:^{
        // Clean up any unfinished task business by marking where you.
        // stopped or ending the task outright.
        [application endBackgroundTask:bgTask];
        bgTask = UIBackgroundTaskInvalid;
    }];

    // Start the long-running task and return immediately.
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{

        // Do the work associated with the task, preferably in chunks.

        [application endBackgroundTask:bgTask];
        bgTask = UIBackgroundTaskInvalid;
    });
}
于 2012-11-07T04:13:48.093 回答