我想知道当用户锁定和解锁iPad屏幕时幕后发生的事情。我有一个使用NSURLConnection下载文件的应用程序,并且下载失败并出现SOAP错误(“无法找到指定主机名的服务器”),但是当用户锁定屏幕时却解锁了它。 无论错误弹出的事实如何,下载永远不会完成。任何想法为什么以及可以做些什么呢?
NSMutableURLRequest* request = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:300];
NSURLConnection* conn = [[NSURLConnection alloc] initWithRequest: request delegate: self];
据我所知,当我点击主页按钮时,我得到:
applicationWillResignActive
applicationDidEnterBackground
三小时后我回忆起应用程序后,我得到了:
applicationWillEnterForeground
,即使在后台,下载已经完成或已经取得进展。
当我将它留在后台更长时间(5分钟)时,它会因错误而超时。
当我锁定屏幕时,我得到相同的应用程序状态顺序,但也有关于下载断开连接的错误消息。
谢谢!
答案 0 :(得分: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;
});
}