ios - 在几秒钟内多次调用 Healthkit 后台交付
问题描述
我有一个运行以下代码的应用程序,当应用程序处于后台/暂停/终止时每小时获取 Healthkit 数据,并且它每小时运行一次而不会失败。代码是从 appdelgate 调用的
didFinishLaunchingWithOptions
然而,它实际上是在不到一秒的时间内每小时触发 3-6 次查询,因此数据访问我的服务器的次数比需要的多 3-6 倍。
我已经阅读了很多关于健康工具包背景交付的问题,但似乎没有一个涵盖这个问题。
我已经读过这可能是因为我每次都在注册后台刷新,我应该检查我是否已经注册而不是重新注册,但我不知道如何检查并且找不到任何文档参考,甚至提到了这个过程。鉴于代码每小时运行的次数如此多变,我也不知道这是否是问题所在。
任何帮助将不胜感激。
func startObservingKJ() {
print("BG Code Called")
let KJQuantityType = HKQuantityType.quantityType(forIdentifier: .activeEnergyBurned)!
self.healthStore.enableBackgroundDelivery(for: KJQuantityType, frequency: .hourly) { (success, error) in
if let unwrappedError = error {
print("could not enable background delivery KJ: \(unwrappedError)")
}
if success {
print("background delivery enabled KJ")
}
}
let query = HKObserverQuery(sampleType: KJQuantityType, predicate: nil) { (query, completionHandler, error) in
self.updateKJandSteps() {
completionHandler()
}
}
healthStore.execute(query)
}
解决方案
我终于意识到该查询self.updateKJandSteps()
多次令人兴奋,因为查询返回了多个条目。我添加了一项检查以确保它self.updateKJandSteps()
尚未运行,这解决了问题,现在只进行了一次更新。
推荐阅读
- maven - .m2/settings.xml 中的新密码不起作用
- google-apps-script - 比较不同工作簿中的列,编辑匹配的行
- ruby-on-rails - 急切负载关系
- git - 远程上的两个相同目录具有不同的情况,而本地只有一个
- facebook-graph-api - 如何通过图形 API 找到在 instagram UI 上看到的参与?
- algorithm - 在 CUDA 中使用 std 容器作为内核输入的可能性
- oauth-2.0 - Google Home 未发送带有请求的誓言令牌
- c# - 试图从 SQL Server 中提取两个时间范围之间的记录
- ios - 通过 iOS SDK 使用 Apple Pay
- firebase - Flutter Firebase 如何集成生成令牌的第三方身份验证