当应用程序从后台删除或在设备重新启动时使用NSURLSession恢复任务

Aji*_*kar 6 objective-c amazon-s3 ios completionhandler nsurlsession

我已经检查了很多文档,但是当从后台或设备重启中移除app时,无法找到使用NSURLSession恢复任务的解决方案.

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

  1. 当app在前台和后台时,使用NSURLSessionUploadTask将文件上传到S3.
  2. 当应用程序在上传时由于任何其他原因崩溃并且如果应用程序未从后台删除时恢复任务.
  3. 如果我在上传时重启设备并且未从后台删除应用,则重新启动任务.

这是我在appdelegate的applicationDidBecomeActive方法中编写的恢复功能的代码.

// 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 -------");
     }
 }];
Run Code Online (Sandbox Code Playgroud)

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

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

所以我的问题是,当app从后台移除时,这可以恢复任务吗?或者任何人都可以给我参考链接,我可以找到相同的答案,任何帮助表示赞赏.

Aji*_*kar 2

最后我得出的结论是,

\n\n

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

\n\n

如果用户从多任务屏幕终止应用程序,系统将取消所有 session\xe2\x80\x99s 后台传输。

\n\n

有关更多详细信息,请查看Apple 关于 NSURLSessionConfiguration Class Reference 的文档。

\n