继续在后台下载

时间:2012-06-19 12:25:03

标签: ios uiapplicationdelegate background-task

我正在创建一个应用程序,其中我从服务器下载一些数据。在后台进行时,我希望连接应该继续运行,以便可以下载数据。我知道 appDelegate

中有方法
- (void)applicationDidEnterBackground:(UIApplication *)application  
应用程序进入后台时调用的

。但是,当在viewController中创建连接时,如何在 appDelegate 中管理它? 还有/其他方式可以这样做吗?我已经通过this链接但是有一些简单的实现吗?

3 个答案:

答案 0 :(得分:15)

在后台继续执行某些操作的一种方法是创建一个单独的线程来进行下载。在线程内部,在对beginBackgroundTaskWithExpirationHandler:和endBackgroundTask的调用之间包含下载操作。你不需要检查你是否在后台运行,你只需要调用这两种方法。

// Tell iOS this as a background task in case we get backgrounded
UIBackgroundTaskIdentifier taskId = [[UIApplication sharedApplication] 
          beginBackgroundTaskWithExpirationHandler:NULL];

//----------------------------------------------
// Perform your download operations here
//----------------------------------------------
ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];

// Tell iOS that we are done with stuff that needed to keep going even if backgrounded    
[[UIApplication sharedApplication] endBackgroundTask:taskId];

答案 1 :(得分:3)

[编辑] 抱歉,我不正确,正如评论中指出的那样,您可以延长在应用程序进入后台之前/之前执行操作的时间限制。这是Apple's Official Documentation

答案 2 :(得分:1)

我不知道您是如何准确处理数据下载的。但你可以看看ASIHTTPRequest。它非常简单明了,如果将编译器标志设置为 -fno-objc-arc ,则可以使用ARC。有了这个你只需要使用

ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
[request setShouldContinueWhenAppEntersBackground:YES]; //For iOS 4.0 and up 

这很有效。

Here你可以看到ASIHTTPRequest是如何工作的

希望它有所帮助!