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



所以根据苹果的说法,我需要在从添加到 HK 的数据触发updateHandler后调用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,一切正常,但我从未长时间测试过。

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

您必须调用 completionHandler,否则将不会调用 updateHandler。

参考: https://developer.apple.com/documentation/healthkit/hkobserverquerycompletionhandler

"你必须在处理完传入数据后立即调用这个块。调用此块会告知 HealthKit 您已成功接收后台数据。如果不调用此块,HealthKit 将继续尝试使用退避算法启动您的应用程序。如果您的应用三次无法响应,HealthKit 将假定您的应用无法接收数据,并停止向您发送后台更新。

相关内容

  • 没有找到相关文章

最新更新