【问题标题】:NSURLSession background session callbacks on app termination应用程序终止时的 NSURLSession 后台会话回调
【发布时间】:2015-05-19 13:27:53
【问题描述】:

我正在使用以下代码为大量上传创建后台会话,

NSURLSessionConfiguration *config = [NSURLSessionConfiguration backgroundSessionConfigurationWithIdentifier:identifier];

NSURLSession *session = [NSURLSession sessionWithConfiguration:config delegate:delegate delegateQueue:nil];

并保存标识符以便稍后与会话重新关联。但是一旦应用程序进入后台并被操作系统终止,在重新启动时,即使我使用相同的标识符创建会话,我也不会收到来自该会话的任何回调。它总是创建没有正在进行的上传任务的新会话。

上一个任务无法提前完成,因为我有 GB 要上传。

我在这里遗漏了什么吗?任何其他设置等。

【问题讨论】:

  • 您如何确定任务已成功启动,并且在应用程序恢复后它仍未继续执行?
  • @MarcusAdams 开始上传后,我在应用程序进入后台之前获得了上传进度。恢复后,如果应用程序只是暂停,那么它会继续给我进步。但如果应用程序被操作系统终止并重新启动,则会话没有回调。

标签: ios objective-c ios7 ios8 nsurlsessionuploadtask


【解决方案1】:

同时保存代理以接收回调! App kill 后不会保留委托的实例。

让您的代理遵守 NSCoding 协议并进行归档和取消归档!

干杯:)

【讨论】:

  • 保留代表真的很重要吗??因为当我们再次使用相同的标识符创建会话对象时,我们可以为其分配一个新的委托,它应该开始向该委托发送回调。
  • 但是您的任务是在此会话中创建的。因此,当您创建新会话时,除非您在此会话中创建新任务,否则您之前正在进行的任务不会与新会话相关联
猜你喜欢
  • 2019-09-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多