在后台继续下载

12

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

- (void)applicationDidEnterBackground:(UIApplication *)application  

当应用程序进入后台时调用的方法。但是,由于连接是在viewController中创建的,所以如何在appDelegate中管理它?
此外,是否有其他可以实现这一点的方法?我已经查阅了此链接,但是否有更简单的实现方式?


这是官方的做法,据我所知没有其他方法。 - Omar Abdelhafith
你应该查看这个链接 https://dev59.com/WVPTa4cB1Zd3GeqPfw-Q - swiftBoy
3个回答

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
你可以设置ASIHttpRequest属性:[request setShouldContinueWhenAppEntersBackground:YES]; - HelloWorld
非常感谢!!!请纠正我如果我错了:总之,以后台方式或前台方式运行任务几乎没有区别。两种方式都可以使用此代码执行。但是有两点不同: 1. 如果您的后台任务太长,则可能在完成之前被终止!2. 最好使用 endBackgroundTask:taskId,这样可以节省额外的电池电量。 - mfaani

3

[编辑] 不好意思我之前说错了,正如评论中指出的那样,您可以在应用程序进入后台之前/之后延长执行操作的时间限制。这里是苹果官方文档


这不是真的,你可以在后台执行一个有限长度的任务,最长时间为10分钟。Finite-Length task - rckoenes
@rckoenes 您确实是正确的,我道歉。我会编辑我的答案。谢谢您的信息 :) - bennythemink
仍然不正确,您可以在执行有限长度任务之前调用beginBackgroundTaskWithExpirationHandler:。您无需在进入后台后执行操作。您可以在应用程序被推到后台之前启动任务。 - rckoenes

1

我不知道你如何准确地处理数据下载。但是你可以看一下ASIHTTPRequest。它非常简单直接,如果你将编译器标志设置为-fno-objc-arc,它也可以与ARC一起使用。这样你只需要使用

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

这很有效。

在这里 您可以看到ASIHTTPRequest的工作原理

希望能有所帮助!


ASIHTTPRequest不再积极开发...根据这里的消息。只是说一下。 - zero0cool
没错,它仍然像魔法般运作。我还没有找到与ASIHTTPRequest一样功能丰富的好替代品。 - Thermometer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接