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

Posted

技术标签:

【中文标题】当应用程序从后台删除或设备重启时使用 NSURLSession 恢复任务【英文标题】:Resuming tasks using NSURLSession when app removed from background or on device reboot 【发布时间】:2015-06-12 12:36:16 【问题描述】:

我检查了许多文档,但在应用从后台删除或设备重启时找不到使用 NSURLSession 恢复任务的解决方案。

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

    当应用在前台和后台时,使用 NSURLSessionUploadTask上传文件到 S3。 当应用在上传过程中由于任何其他原因崩溃并且应用未从后台删除时恢复任务重启任务如果我在上传时重启设备并且应用程序没有从后台删除。

这是我用 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 和 3),当我从后台删除应用程序并再次启动时,它没有给出正在进行的任务列表,根据代码它属于 else if和日志

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

所以我的问题是当应用程序从后台删除时这可能恢复任务吗?或者任何人都可以给我参考链接,我可以在其中找到相同的答案,不胜感激。

【问题讨论】:

你找到解决这个问题的办法了吗? @AhadKhan 还没有,缺少文档,我还在寻找……如果我找到了,我会在这里发帖 【参考方案1】:

最后我得出结论,

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

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

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

【讨论】:

以上是关于当应用程序从后台删除或设备重启时使用 NSURLSession 恢复任务的主要内容,如果未能解决你的问题,请参考以下文章

设备重启后 iBeacon 监控/测距

当应用程序从后台删除时,Apple Push 通知不会在 ios 7 上传递

android webview或浏览器不会在设备重启时删除会话cookie

当应用程序处于后台或设备锁定时,Airplay 停止播放视频流

当应用程序进入暂停状态时取消本地通知。(从后台删除)

当移动设备处于睡眠模式或浏览器处于后台时,如何使用 Web 应用程序在移动浏览器中使用 HTML Geolocation API 获取位置?