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

时间:2015-06-12 12:36:16

标签: ios objective-c amazon-s3 nsurlsession completionhandler

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

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

    当应用程序处于前台和后台时,使用NSURLSessionUploadTask
  1. 将文件上传到S3。
  2. 在应用崩溃时由于上传时的任何其他原因导致崩溃且未从后台删除应用。
  3. 重新启动任务如果我在上传时重新启动设备并且未从后台删除应用。
  4. 这是我在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 -------");
         }
     }];
    

    现在问题在于上面提到的情况(2&amp; 3)它没有提供正在进行的任务列表,当我从后台删除应用程序并再次启动时,根据它所属的代码否则如果条件和日志

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

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

1 个答案:

答案 0 :(得分:1)

最后我得出结论,

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

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

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