我知道在iOS7中启动了NSURLSession类,并且它确实有NSURLSessionUploadTask用于将数据上传到服务器,但我需要知道它是否会在后台模式下继续上传,如果没有?然后该怎样做才能在后台模式下继续完成上传任务。
之前我们可以使用beginBackgroundTaskWithExpirationHandler:和endBackgroundTask:iOS6将继续执行该任务最多10分钟,但在iOS 7及更高版本中,它几乎不会运行3分钟(据我所知)。
所以如果可以的话,请你帮我解决任何解决方案或示例。
答案 0 :(得分:1)
您的第一个问题的答案可能是肯定的,您可以继续上传iOS允许的时间,但是您需要使用 UIBackgroundTaskIdentifier 来获取额外的时间。< / p>
对于在应用未运行时上传剩余图像的问题的第二部分,您可以使用背景提取。启用后台获取时,应用程序会定期从网络下载和处理少量内容。因此,通过组合 UIBackgroundTaskIdentifier 和后台提取,您可以实现在后台上传图像。
下面提到了组合UIBackgroundTaskIdentifier和后台提取的步骤。
首先让我们初始化 UIBackgroundTaskIdentifier
-(void) beginBackgroundUploadTask
{
if(self.backgroundTask != UIBackgroundTaskInvalid)
{
[self endBackgroundUploadTask];
}
self.backgroundTask = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^{
[self endBackgroundUploadTask];
}];
}
一旦后台任务从规定的时间内用完,我们就应该使后台任务失效并结束。
-(void) endBackgroundUploadTask
{
[[UIApplication sharedApplication] endBackgroundTask:self.backgroundTask ];
self. backgroundTask = UIBackgroundTaskInvalid;
}
不要忘记在Xcode中启用后台模式→选择项目文件→功能→选中后台获取复选框。
有关详细信息,请参阅以下链接: http://mobisoftinfotech.com/resources/mguide/background-fetch-ios/