NSURLSession从应用程序恢复已挂起或崩溃



我正在开发一个下载大文件的应用程序。我已经从苹果下载并运行了这个示例。

每当应用程序暂停或从Xcode重新运行时,我都不会在日志中看到显示下载进度的输出。

我也看到了这个问题的答案,但我没有看到如何将其转换为示例中已经使用的委托之外的代码。

你能帮助我如何在应用程序重新启动后将我的应用程序连接到后台下载吗。

每当应用程序暂停或从Xcode重新运行时,我都不会在日志中看到显示下载进度的输出。

你也不应该期望。

  • 如果应用程序被挂起,则表示它没有运行;这就是"暂停"的意思。没有任何日志记录;你的应用程序处于深度冻结状态。如果您继续(而不是从Xcode重新启动应用程序:相反,点击Springboard中暂停的应用程序图标)日志记录也将恢复。您从未与下载"脱节";你刚刚睡着了。

  • 如果你在应用程序仍在运行或暂停时通过从Xcode重新启动进行测试,系统会将其视为停止后台下载的信号。

那么,当你的应用程序在下载过程中终止时,你究竟该如何测试会发生什么呢?测试方法是在设备上运行,并在下载过程中崩溃您的应用程序。(IIRC,苹果的例子提供了一个按钮,可以让你这样做。)在这种情况下,后台下载将继续。然后,您可以从设备(而不是从Xcode)再次启动应用程序。您现在不会在Xcode中获得控制台消息,但将在该设备的"窗口>设备"控制台中获得这些消息。

然后,您将看到,如果您正确地实现了application:handleEventsForBackgroundURLSession:completionHandler:,它将被调用。如果随后重新创建后台会话,则将调用任务委派方法。您已恢复与后台会话的联系。

最新更新