Фоновая доставка HKObserverQuery перестает работать после вызова завершение Handler
Так по словам Apple, мне нужно позвонить HKObserverQueryCompletionHandler
после updateHandler
запускается из данных, добавляемых в HK.
Но как только я вызываю завершение Handler, запрос наблюдателя перестает давать больше обновлений в фоновом режиме.
Вот мой код:
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
})
Если я не вызываю завершение Handler, все работает нормально, но я никогда не проверял в течение длительных периодов времени..
2 ответа
Призвание completionHandler()
указывает, что вы закончили обработку новых данных. Называйте его только после обработки результатов запросов, которые вы выполняете в ответ на updateHandler
будучи призванным Если вы позвоните completionHandler()
Как только вы это сделаете, система перестанет запускать ваше приложение в фоновом режиме, прежде чем вы сможете обрабатывать данные.
Вы должны вызвать завершениеHandler, иначе updateHandler не будет вызван.
ссылка: https://developer.apple.com/documentation/healthkit/hkobserverquerycompletionhandler
«Вы должны вызвать этот блок, как только вы закончите обработку входящих данных. Вызов этого блока сообщает HealthKit, что вы успешно получили фоновые данные. Если вы не вызовете этот блок, HealthKit продолжит попытки запустить ваше приложение, используя обратный вызов. отключен алгоритм. Если ваше приложение не отвечает три раза, HealthKit предполагает, что ваше приложение не может получать данные, и перестает отправлять вам фоновые обновления».