什么是应用程序代理使用performFetchWithCompletionHandler的?

问题描述 投票:1回答:2

我有点困惑着如何performFetchWithcompletionHandler与iOS应用的生命周期经营。在文档中它提到,它为我们提供了30秒,下载任何数据,但在那个时候将我们的应用程序冻结30秒?

ios lifecycle background-fetch
2个回答
1
投票

......将我们的应用程序在那个时候冻结30秒?

不,正好相反。当你的应用被挂起时调用此方法,但操作系统将会让你检查数据检索。所以,你的应用程序将被唤醒,在后台运行,并且此方法将被调用,此时您就可以执行快速获取(不超过30秒),看看是否有任何数据检索。当你在处理完您快回来,你调用完成处理程序,让OS知道你做,你的应用程序可以安全地再次暂停。

如果,但是,你无法完成在30秒内你的要求,你的应用程序可能会草率终止,不参加未来的后台获取。因此,在规定的时间内完成是非常重要的。


作为the docs说:

如果您的应用程序支持后台获取方式实现此方法。当机会出现的时候,下载数据时,系统调用这个方法给您的应用程序有机会下载它需要的任何数据。此方法的实现应该下载数据,准备使用这些数据,并调用在completionHandler参数块。

当这个方法被调用时,你的应用程序有高达挂钟时间来进行下载操作和调用指定的完成处理程序块30秒。在实践中,你的应用程序应该在下载所需要的数据后,尽快拨打完成处理程序块。如果你不调用完成处理程序的时候,您的应用程序被终止。更重要的是,该系统采用了经过的时间来计算用电量和数据费用对于应用的后台下载。如果您的应用程序需要很长的时间来调用完成处理程序,它可以给予更少的未来的机会在未来的数据获取。有关支持背景的更多信息读取操作,见Background ExecutionApp Programming Guide for iOS


1
投票

这是关于背景获取,就像当一个应用程序收到无声的通知。在这种情况下,iOS的唤醒在背景为最多30秒的应用程序。和做的东西,每个作家代码和终止该应用。因此,用户将不知道这一点。

这是不建议写复杂的逻辑在该方法中performFetchWithcompletionHandler。其原因是限制时间(30秒)和应用程序开发者不具有在其上的控制。

为了得到这个工作,background mode应在项目capabilities启用。

一个关于这个例子的是无声的推送通知(通知有效载荷具有键content-available = 1

有关详细信息see this

© www.soinside.com 2019 - 2024. All rights reserved.