swift / ios在后台刷新应用程序数据

我正在写一个iOS / Swift应用程序,每隔X分钟从REST服务读取数据并相应地更新UI。

现在,我希望当应用程序放在后台时,从REST服务读取X分钟间隔的任务,并且在刚刚读取的数据满足给定条件的情况下继续调用任务,显示通知提示用户将应用程序回到前台。

在我的search中,我已经阅读了applicationDidEnterBackground事件,我应该用beginBackgroundTaskWithExpirationHandler启动一个任务。

问题是,如果我理解正确,这最多可以允许10/15分钟,如果任务不是以endBackgroundUpdateTask停止的话,应用程序将被终止,而我希望任务能够无限期地持续轮询服务(至less直到用户从应用程序的设置中禁用它)

我的问题是:

这种function如何正常执行? 解决这个问题是否存在一些共同的解决scheme或最佳实践?

使用iOS后台抓取function,您可以指定最小后台抓取时间间隔。 但是连续调用你的代码之间的实际间隔将由iOS框架决定。 有关详细信息,请查看此链接: http : //code.tutsplus.com/tutorials/ios-7-sdk-working-with-background-fetch–mobile-20520

我在我的应用程序中使用这种方法,我认为这是一个首选的方法。

  1. 您可以使用本地通知,可以从背景中呈现,以防您的情况得到满足。

  2. 正确的说,iOS最终会closures后台进程,不能强制执行连续的后台活动。 使用backgroundTimeRemaining属性来检查应用程序已经离开了多less时间,并尽量通过调用endBackgroundTask来优雅地处理它,以便iOS不会强制endBackgroundTask您的应用程序。

作为解决scheme,您可以考虑使用带有content-available : YES远程通知content-available : YES ,它运行didReceiveRemoteNotification

看看Parse.com他们的本地数据存储是你试图获得成功的抽象。 那么真的有必要在后台刷新。 如果调用相对较快,则不需要刷新,直到用户打开应用程序。 后台进程就像使用networking一样,当用户不在Wifi上时,可能会耗费电量。 所以仔细考虑用例!