iOS后台获取 UIBackgroundFetchResult 类型在完成处理程序被调用后如何处理?

24
在后台获取数据完成后,您需要使用以下三个 UIBackgroundFetchResult 状态之一来调用 completionHandler 块: UIBackgroundFetchResultNoDataUIBackgroundFetchResultNewDataUIBackgroundFetchResultFailed
当调用完成处理程序之后,操作系统如何处理这三种结果?
1个回答

17
iOS应用程序编程指南中得知:
当调用您的委托的应用程序:performFetchWithCompletionHandler:方法时,请使用该方法检查新内容并下载该内容(如果可用)。 当下载完成后,执行提供的完成处理程序块,传递指示内容是否可用的结果。 执行此块告诉系统它可以将您的应用程序移回挂起状态并评估其电源使用情况。 下载少量内容快速且准确反映何时有内容可供下载的应用程序比需要更长时间下载其内容的应用程序更有可能在未来接收执行时间。
他们没有给我们太多细节,但我认为足够清楚了:您将fetch的结果传递给系统,以便它可以决定何时给予后台执行时间(以及多少)。 例如,考虑两个不同的应用程序: - 一个下载每晚更新的文件 - 另一个下载更频繁更新的文件,一天多次
在两种情况下,系统都会唤醒您的应用程序,记录开始时间,您的应用程序开始下载,然后告诉系统是否有内容可用。
过一段时间,您会发现系统比第二个应用程序更少地唤醒第一个应用程序,从而优化电池使用。
此外,如果您使用NSURLSession启动下载,则系统将评估您的应用程序的电源消耗(因为使用NSURLSession您有“无限”时间来下载文件),即使此指标也用于决定多久唤醒您的应用程序。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接