HKObserverQuery 后台传递在调用completionHandler 后停止工作

Posted

技术标签:

【中文标题】HKObserverQuery 后台传递在调用completionHandler 后停止工作【英文标题】:HKObserverQuery background delivery stops working after calling completionHandler 【发布时间】:2017-10-10 14:26:45 【问题描述】:

所以根据Apple的说法,我需要在updateHandler被添加到HK的数据触发后调用HKObserverQueryCompletionHandler

但是一旦我调用了completionHandler,观察者查询就会停止在后台提供更多更新..

这是我的代码:

guard let sampleType = sample as? HKQuantityType else  return nil 

let query = HKObserverQuery(sampleType: sampleType, predicate: nil, updateHandler:  query, completionHandler, error in

    completionHandler()

    IamExecutingHKStatisticsCollectionQueryHere()
)

healthStore?.execute(query)
healthStore?.enableBackgroundDelivery(for: sampleType, frequency: .hourly, withCompletion:  success, error in

)

如果我不调用completionHandler,一切正常,但我从未测试过很长时间..

【问题讨论】:

【参考方案1】:

调用completionHandler() 表示您已完成处理新数据。仅在您处理了为响应调用updateHandler 而执行的查询的结果后才调用它。如果您像现在一样早点拨打completionHandler(),系统将在您有机会处理数据之前停止在后台运行您的应用程序。

【讨论】:

我已经试过了..没有改变任何东西。问题是,如果我调用 completionHandler(),我不会收到任何其他更新。调用completionHandler是否意味着我想停止接收更新? 您以这种方式观察哪些样本类型?您的代码注册每小时更新一次。您是说当有新数据时您的应用程序不会每小时启动一次?您是否希望它立即收到通知? 数据类型为steps。当新步骤添加到 HK 时,我希望每小时收到通知,但我没有。虽然如果我从不调用completionHandler,一切都会完美运行。我怀疑这是一个错误?!

以上是关于HKObserverQuery 后台传递在调用completionHandler 后停止工作的主要内容,如果未能解决你的问题,请参考以下文章

HKObserverQuery 连续两次随机调用

HKObserverQuery 仅在应用程序重新打开时运行

添加新数据并设置 hkObserverQuery 时,HealthKit 不启动应用程序

转载Vue 2.x 实战之后台管理系统开发

HKObserverQuery 无法在 iPhone 上运行

从 HKObserverQuery 获取结果