当应用程序从后台删除或设备重启时使用 NSURLSession 恢复任务
Resuming tasks using NSURLSession when app removed from background or on device reboot
我已经检查了很多文档,但找不到 当应用程序从后台删除或设备重启时使用 NSURLSession 恢复任务的解决方案。
我正在使用 amazon 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如果条件和日志
2015-06-12 17:12:32.902 AppName[162:60b] ------没有之前的任务------
所以我的问题是当应用程序从后台移除时是否可以恢复任务?或者任何人都可以给我参考链接,我可以在其中找到相同的答案,我们将不胜感激。
最后我得出结论,
如果 iOS 应用程序被系统终止并重新启动,该应用程序可以使用相同的标识符来创建新的配置对象和会话,并检索在终止。 此行为仅适用于系统正常终止应用程序。
如果用户从多任务屏幕终止应用程序,系统将取消所有会话的后台传输。
有关更多详细信息,请查看 Apple 关于 NSURLSessionConfiguration 的文档 Class 参考 here。
我已经检查了很多文档,但找不到 当应用程序从后台删除或设备重启时使用 NSURLSession 恢复任务的解决方案。
我正在使用 amazon 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如果条件和日志
2015-06-12 17:12:32.902 AppName[162:60b] ------没有之前的任务------
所以我的问题是当应用程序从后台移除时是否可以恢复任务?或者任何人都可以给我参考链接,我可以在其中找到相同的答案,我们将不胜感激。
最后我得出结论,
如果 iOS 应用程序被系统终止并重新启动,该应用程序可以使用相同的标识符来创建新的配置对象和会话,并检索在终止。 此行为仅适用于系统正常终止应用程序。
如果用户从多任务屏幕终止应用程序,系统将取消所有会话的后台传输。
有关更多详细信息,请查看 Apple 关于 NSURLSessionConfiguration 的文档 Class 参考 here。