2016-12-03 29 views
2

如果一个应用程序依赖于后台获取和需要做一些处理,如果获取的数据不是空的,它是有意义的事:在后台获取期间使用背景nsurlsession和后台任务是否合理?

1)取得与背景NSURLSession(使用backgroundSessionConfigurationWithIdentifier)数据

2 )在后台任务中处理数据(使用beginBackgroundTask)

由于系统提供了30秒来完成后台提取,因此似乎不需要#1或#2。文档(https://developer.apple.com/library/content/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/BackgroundExecution/BackgroundExecution.html)没有明确说明这些技术是否可以合并,所以我只是寻求确认。

回答

2

好吧,经过一些挖掘背景后,我想我可以至少部分回答自己的问题,为那些仍然怀疑。

  1. 背景获取与背景配置NSURLSession

    • 该应用仅具有30秒才能完成背景期间下载取。如果整个 下载流程所需时间少于此限制,则可以使用 默认URLSession(无后台配置)。

    • 但是,如果要加载的资源很大,它非常有意义 花给予30秒(或更少)的准备和启动 URLSession与后台配置。配置完成后,您的NSURLSession对象将无缝切换下载 任务到系统,以便资源转移不会成为30秒完成限制的主题 。与后台任务

      • 使用后台任务的应用程序可以通过最多3分钟,以完成一个相对长期运行的任务推迟悬挂

    • 背景获取(例如短文件上传,下载,文件I/O等),可能已经由用户在前台发起。

    • 与StackOverflow中提供的许多示例相反,您不需要等到应用程序移至背景为止。在beginBackgroundTask/endBackgroundTask中执行时间少于3分钟的任务,即使在前台执行应用程序时也是如此。我会继续并声称,在每种情况下,如果没有beginBackgroundTask/endBackgroundTask作用域运行此类任务,这是一个错误,因为编写处理applicationDidEnterBackground的代码来跟踪完成长时间运行的任务是非常痛苦的用户与UI的交互。
    • 如果希望通过UI和系统的后台提取启动下载作业,则重复使用相同的代码并将两种技术组合在一起是完全不错的。