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

时间:2014-05-20 20:09:49

标签: ios objective-c background-process

应用程序在后台提取期间完成其操作后,您必须使用以下三种UIBackgroundFetchResult状态之一调用completionHandler块:UIBackgroundFetchResultNoDataUIBackgroundFetchResultNewDataUIBackgroundFetchResultFailed

调用完成处理程序后,操作系统如何处理这三个结果中的每一个?

1 个答案:

答案 0 :(得分:14)

来自iOS App App Programming guide

  

当调用应用程序:performFetchWithCompletionHandler:您的委托方法时,使用该方法检查新内容并下载该内容(如果可用)。下载完成后,执行提供的完成处理程序块,传递指示内容是否可用的结果。执行此块会告诉系统它可以将您的应用程序移回暂停状态并评估其耗电量。下载少量内容的应用程序可以快速准确地反映他们有下载内容的时间比将来需要更长时间下载内容的应用程序更有可能获得执行时间

他们没有给我们这么多细节,但我认为很清楚:你将获取的结果传递给系统,因此它可以决定何时给出后台执行时间(以及多少)。登记/> 例如,考虑两个不同的应用程序:
- 一个下载每晚更新的文件
- 其他下载文件更频繁,一天多次更新

在这两种情况下,系统都会唤醒您的应用,记下开始时间,您的应用开始下载,然后告诉系统内容是否可用。

一段时间后,您会发现系统会比第二个应用程序更少地唤醒第一个应用程序,从而优化电池消耗。

此外,如果你使用NSURLSession开始下载,系统将评估你的应用程序的功耗(因为使用NSURLSession你有"无限制"下载文件的时间),即使这个指标是用来决定唤醒你的应用程序的频率。