首页 > 解决方案 > 在几秒钟内多次调用 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)
 }

标签: iosswiftbackground-processhealthkit

解决方案


我终于意识到该查询self.updateKJandSteps()多次令人兴奋,因为查询返回了多个条目。我添加了一项检查以确保它self.updateKJandSteps()尚未运行,这解决了问题,现在只进行了一次更新。


推荐阅读