Ios RunKeeper';s Breeze应用程序是否仍在后台运行?

Ios RunKeeper';s Breeze应用程序是否仍在后台运行?,ios,Ios,我正在研究RunKeeper的Breeze iOS应用程序如何一直在后台运行。我们正在构建一些模糊相似的东西(使用step数据,但使用它做其他事情),我需要每隔几分钟对传入的数据进行一次短处理 我注意到了一些事情 Breeze为以下背景模式注册: <key>UIBackgroundModes</key> <array> <string>fetch</string> <string>location</s

我正在研究RunKeeper的Breeze iOS应用程序如何一直在后台运行。我们正在构建一些模糊相似的东西(使用step数据,但使用它做其他事情),我需要每隔几分钟对传入的数据进行一次短处理

我注意到了一些事情

Breeze为以下背景模式注册:

<key>UIBackgroundModes</key>
<array>
    <string>fetch</string>
    <string>location</string>
    <string>remote-notification</string>
</array>
ui背景模式
取来
位置
远程通知
起初,我以为他们可能在定期使用静默通知让应用程序恢复活力,但似乎系统会保留静默通知,除非设备已插入,因此限制了其在此应用程序中的使用

在电池使用区域,它会在Breeze应用程序下显示背景位置。我们已经设置了后台位置更新,这在一段时间内非常有效,但系统最终会暂停应用程序。我们还设置了重要的位置更新,但如果有的话,最多每隔20分钟左右就会回来一次。过了一会儿我们又被停赛了。这对于API来说是有意义的

我注意到的另一件有趣的事情是,如果你从任务列表中手动关闭Breeze应用程序,你会立即收到一个本地通知,告诉你重新启动该应用程序。也许这是来自applicationWillTerminate,但如果系统暂停应用程序,会调用它吗?

Cory

我是微风上的工程师,我可以给你一些关于它如何工作的见解。Breeze不会在后台连续运行,但它会通过上面列出的所有方法(定位、后台提取和静默推送)频繁唤醒

后台位置(自动暂停关闭)将使您在后台几乎连续执行,但由于CPU永远无法睡眠,因此它的电池成本很高。我不推荐它

Breeze既允许自动暂停,也允许在主动使用“最佳”精度位置数据时使用延迟更新。我们之所以使用重要的位置更新,是因为存在需要进行重大位置更改才能在后台启动/停止标准位置服务的错误/缺陷。当我们使用重要的定位服务时(通常在您静止一段时间之后),我们使用区域监控(geofences)再次触发更高精度的定位数据。当应用程序被定位服务唤醒时,它会检查来自M7的运动数据,以确定如何调整定位服务(以及其他高电量消耗活动)

其次,我们使用后台提取来唤醒应用程序,执行相同的运动数据检查。后台提取在一天中进行,您可以指定提取之间的间隔,但这不能保证。Breeze主要使用最小间隔,但有自己的速率限制,因此不会在每次醒来时执行重要的工作。当手机处于唤醒状态时(通常是当用户打开手机并正在做其他事情时),后台提取会更频繁地发生

正如您所注意到的,最后一个应用程序唤醒是无声推送。这本质上是一种回退,如果我们的服务器在一段时间内没有收到来自客户端应用程序的消息,将使用无声推送来唤醒该应用程序。根据我们的经验,无声推送只发送到插入的应用程序,但它们肯定不能保证可靠

applicationWillTerminate本地通知主要用于iOS7,在iOS7中,通过任务列表终止应用程序将阻止其接收静默推送通知。我相信iOS8中不再是这种情况

感谢您对Breeze的兴趣,这是一款非常有趣的产品

Cory

我是微风上的工程师,我可以给你一些关于它如何工作的见解。Breeze不会在后台连续运行,但它会通过上面列出的所有方法(定位、后台提取和静默推送)频繁唤醒

后台位置(自动暂停关闭)将使您在后台几乎连续执行,但由于CPU永远无法睡眠,因此它的电池成本很高。我不推荐它

Breeze既允许自动暂停,也允许在主动使用“最佳”精度位置数据时使用延迟更新。我们之所以使用重要的位置更新,是因为存在需要进行重大位置更改才能在后台启动/停止标准位置服务的错误/缺陷。当我们使用重要的定位服务时(通常在您静止一段时间之后),我们使用区域监控(geofences)再次触发更高精度的定位数据。当应用程序被定位服务唤醒时,它会检查来自M7的运动数据,以确定如何调整定位服务(以及其他高电量消耗活动)

其次,我们使用后台提取来唤醒应用程序,执行相同的运动数据检查。后台提取在一天中进行,您可以指定提取之间的间隔,但这不能保证。Breeze主要使用最小间隔,但有自己的速率限制,因此不会在每次醒来时执行重要的工作。当手机处于唤醒状态时(通常是当用户打开手机并正在做其他事情时),后台提取会更频繁地发生

正如您所注意到的,最后一个应用程序唤醒是无声推送。这本质上是一种回退,如果我们的服务器在一段时间内没有收到来自客户端应用程序的消息,将使用无声推送来唤醒该应用程序。根据我们的经验,无声推送只发送到插入的应用程序,但它们肯定不能保证可靠

applicationWillTerminate本地通知主要用于iOS7,在iOS7中,通过任务列表终止应用程序将阻止其接收静默推送通知。我相信iOS8中不再是这种情况

感谢您对Breeze的兴趣,这是一款非常有趣的产品

感谢您的伟大洞察力!