3分钟后继续后台任务

时间:2016-10-05 14:50:09

标签: ios background nsurlconnection

我尝试了这个问题的答案

How can a connection started with NSURLConnection while in the foreground be continued in the background?

就像魅力一样!但只有3分钟在后台,然后iOS发送应用程序进入睡眠状态,我试图上传n个视频,3分钟没有发送所有数据,我还说我可以将我的NSURLConnection更改为NSURLSession,但我不知道如何开始或花多少时间。

有没有办法让后台任务在3分钟后保持活动状态直到上传结束?

1 个答案:

答案 0 :(得分:1)

  

有没有办法让后台任务在3分钟后保持活动状态直到上传结束?

不,没有。正在进行的后台执行仅限于非常狭窄的目的(例如播放音乐,VOIP应用,导航应用等)。所有这些都在 iOS应用程序编程指南的Background Execution部分中列出。

  

我还[读取]我可以将NSURLConnection更改为NSURLSession,但我不知道如何开始或花费多少时间。

是的,这是正确的。如果您希望在应用进入后台后网络请求持续超过几分钟,则应使用背景为NSURLSession的{​​{1}}。有关详细信息,请参阅适用于iOS的应用程序编程指南中的Downloading Content in the Background。有关NSURLSessionConfiguration的介绍,请参阅WWDC 2013 What's New in Foundation Networking,包括有关如何进行后台会话的演示。

我建议您分两步解决此问题:首先,转换为NSURLSession,然后启用后台NSURLSession操作。我想你会发现这第一步非常简单。所有的概念都非常熟悉。唯一的技巧是NSURLSession有两种类型的接口,委托协议模式和完成处理程序。如果您打算稍后将其用于后台操作,那么您将希望坚持使用委托协议模式,因为更简单的完成处理程序模式与后台会话不兼容。并且您将要使用从文件上传的上传任务方法(不要使用基于流的再现)。

第二步,启用后台操作并不难,但这可能很棘手,因为它涉及一些我们过去不必担心的新细节(例如,app委托代码捕获(以后调用)后台会话的完成处理程序。此外,当您开始调试后台会话代码时,在下一个调试会话中显示由一个调试会话启动的请求可能会令人迷惑(嘿,它们是应用程序时应该继续运行的后台会话毕竟终止了)。这不是问题,但可能有点迷惑。