在后台获取期间使用后台nsurlsession和后台任务是否有意义?

时间:2016-12-03 09:13:33

标签: ios

如果某个应用依赖于后台获取,并且如果获取的数据不为空,则需要进行一些处理,这样做是否有意义:

1)使用后台NSURLSession获取数据(使用backgroundSessionConfigurationWithIdentifier)

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

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

1 个答案:

答案 0 :(得分:3)

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

  1. 使用后台配置的NSURLSession进行后台提取

    • 在后台获取期间,该应用只需30秒即可完成下载。如果整个 下载流程需要的时间少于此限制,使用起来很好 默认URLSession(没有后台配置)。

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

  2. 使用后台任务进行背景提取

    • 使用后台任务,应用程序可以将暂停延迟最多3分钟,以完成可能由用户启动的相对长时间运行的任务(例如,短文件上载,下载,文件i / o等)在前景中。
    • 与StackOverflow中提供的许多示例相反,您无需等到应用程序移至后台。即使您的应用程序在前台执行,也可以在beginBackgroundTask / endBackgroundTask中执行花费不到3分钟的任务。在没有beginBackgroundTask / endBackgroundTask范围的情况下运行这样的任务,我会继续并声称这是一个错误,因为编写处理applicationDidEnterBackground的代码来跟踪由于以下原因而启动的长时间运行任务的完成情况会更加痛苦。用户与UI的互动。
    • 如果希望通过UI和系统的后台提取启动下载作业,则重复使用相同的代码从而将这两种技术结合在一起是完全正确的。