【发布时间】:2015-05-09 17:57:30
【问题描述】:
HKObserverQuery有如下方法支持后台接收更新:
- initWithSampleType:predicate:updateHandler:
updateHandler 有一个completionHandler,它有以下documentation:
这个块被传递给更新处理程序。你必须调用这个块 处理完传入数据后。调用这个 块告诉 HealthKit 你已经成功收到 后台数据。如果你不调用这个块,HealthKit 会继续 尝试使用退避算法启动您的应用程序。如果你的应用 未能响应 3 次,HealthKit 假定您的应用程序无法响应 接收数据,并停止向您发送后台更新。
从查看其他帖子看来,围绕这个处理程序似乎有很多困惑。以下是我对此的一些疑问:
- 应该何时调用处理程序?如果调用得太晚,那么 HK 可能会认为应用程序从未收到查询更新,从而导致您点击后台更新 3-strikes back-off 算法。文档声明它应该在处理其他查询后调用。根据运行这些查询需要多长时间,听起来您可能会很危险地接近触发后台更新警报。
- 为什么需要这个?系统不应该知道应用程序已经启动并收到了后台更新吗?在后台使用
CoreBluetooth时,它只会在后台唤醒您的应用程序 10 秒。无需调用任何处理程序或处理后台更新 3-strikes。 - 如果你点击后台更新 3-strikes 并且 HK 停止发送更新是永久的吗? HK是否会再次开始发送后台更新?如果有一个错误阻止了处理程序被调用并且现在你已经修复了它怎么办。应用程序是否卡住了,永远不会收到更新?还是会在应用重新启动或更新时重置?
- HK 是否让您的应用程序在后台运行,直到调用处理程序?这是其目的的一部分还是只是副作用?如果这是其目的的一部分,我们可以在需要停止之前运行多长时间(并触发第一次后台更新罢工)?
【问题讨论】:
-
这些是目前文档中没有回答的重要问题。
标签: ios background healthkit hkobserverquery