HKObserverQueryCompletionHandler timeout?

Я использую HKObserverQuery и фоновую доставку в своем приложении iOS. В updateHandler HKObserverQuery я выполняю запрос ( HKAnchoredObjectQuery) и отправляю результаты на удаленный сервер через https. Но при медленном соединении (например, EDGE) и при большом объеме данных (например, шаги) отправка данных может занять до одной минуты.

Из документации к HKObserverQueryCompletionHandler:

Когда HealthKit пробуждает ваше приложение, оно вызывает обработчик обновлений для любых запросов наблюдателей, которые соответствуют новым данным. Этот блок передается в обработчик обновлений. Вы должны вызвать этот блок, как только закончите обработку входящих данных. Вызов этого блока сообщает HealthKit, что вы успешно получили фоновые данные. Если вы не вызываете этот блок, HealthKit продолжает пытаться запустить ваше приложение, используя алгоритм отката. Если ваше приложение не отвечает три раза, HealthKit предполагает, что ваше приложение не может получать данные, и прекращает отправлять вам фоновые обновления.

Итак, мой вопрос: сколько времени у меня есть для вызова HKObserverQueryCompletionHandler, прежде чем HealthKit считает мое приложение "зависшим"? Или я должен немедленно вызвать HKObserverQueryCompletionHandler и вместо этого запустить новую длительную фоновую задачу для запроса https?

1 ответ

Вам определенно следует запустить отдельную фоновую задачу, чтобы выполнить передачу данных на ваш сервер и вызвать HKObserverQueryCompletionHandler так скоро, как возможно. В документации не указано, как долго вы можете ждать перед вызовом обработчика, поэтому самое безопасное, что нужно сделать, это вызвать его как можно скорее.

Я опубликовал аналогичный вопрос о путанице вокруг использования HKObserverQueryCompletionHandler здесь, но не было никаких обновлений.

Другие вопросы по тегам