应用程序终止时的 NSURLSession 后台会话回调

Posted

技术标签:

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

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

NSURLSessionConfiguration *config = [NSURLSessionConfiguration backgroundSessionConfigurationWithIdentifier:identifier];

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

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

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

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

【问题讨论】:

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

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

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

干杯:)

【讨论】:

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

以上是关于应用程序终止时的 NSURLSession 后台会话回调的主要内容,如果未能解决你的问题,请参考以下文章

应用程序终止时的 Healthkit 后台交付

应用程序终止时的 Healthkit 后台交付

应用重启后监控 NSURLSession

NSURLSession 后台传输不起作用

NSURLSession:后台崩溃,因为没有调用上传委托

NSURLSession 后台断点下载