当应用程序从后台移除或重启设备时,使用NSURLSession恢复任务

我已经检查了很多文档,但是在应用程序从后台删除或重启设备时找不到使用NSURLSession恢复任务的解决scheme。

我正在处理亚马逊S3上传一些文件,在这我能够

  1. 当应用程序处于前景以及后台时,使用NSURLSessionUploadTask将file upload到S3。
  2. 当上传时由于任何其他原因应用程序崩溃 ,并且如果应用程序未从后台移除,则继续任务
  3. 重新启动任务,如果我重新启动设备,而上传,如果应用程序不会从后台删除。

这里是我的代码,以appdelegate的applicationDidBecomeActive方法编写的恢复function。

// Initialize session config and the background session NSURLSession *l_taskSession = [self backgroundSession]; [l_taskSession getTasksWithCompletionHandler:^(NSArray *dataTasks, NSArray *uploadTasks, NSArray *downloadTasks) { if([uploadTasks count]) { for (int i=0; i<[uploadTasks count]; i++) { NSURLSessionUploadTask *uploadRequestTask = (NSURLSessionUploadTask*)[uploadTasks objectAtIndex:i]; [uploadRequestTask resume]; NSLog(@"-------- Upload Resumed ------- "); } } else if(![uploadTasks count]) { NSLog(@"------- There are no previous tasks -------"); } }]; 

现在问题是在上面提到的情况(2和3),它没有给出正在进行的任务列表,当我从后台删除应用程序,并再次启动,根据代码落在其他条件和日志

2015-06-12 17:12:32.902 AppName [162:60b] ——-没有以前的任务——-

所以我的问题是这可能恢复任务时,从背景中删除应用程序? 或者任何人只要给我参考链接,我可以find同样的答案,任何帮助表示赞赏。

最后我得出结论,

如果iOS应用程序被系统终止并重新启动,则应用程序可以使用相同的标识符来创build新的configuration对象和会话,并检索终止时正在进行的传输状态。 此行为仅适用于系统正常终止应用程序。

如果用户从多任务屏幕终止应用程序,则系统取消所有会话的后台传输。

有关更多详细信息,请查看Apple的NSURLSessionConfiguration类参考文档。