我在iOS应用程序中使用HKObserverQuery和后台交付。在HKObserverQuery的updateHandler中,我执行一个查询(HKAnchoredObjectQuery),并通过https将结果发送到远程服务器。但在慢速连接(例如EDGE)和大量数据(例如步骤)的情况下,发送数据可能需要长达一分钟的时间。
从文档到HKObserver QueryCompletionHandler:
当HealthKit唤醒你的应用程序时,它会对任何与新数据匹配的观察者查询调用更新处理程序。此块被传递给更新处理程序。处理完传入数据后,必须立即调用此块。调用此块会告诉HealthKit您已成功接收到后台数据。如果您不调用此阻止,HealthKit将继续尝试使用后退算法启动您的应用程序。如果您的应用程序三次未响应,HealthKit会认为您的应用无法接收数据,并停止向您发送后台更新。
所以我的问题是:在我的应用程序被HealthKit假设为"挂起"之前,我需要多少时间才能调用HKObserver QueryCompletionHandler?还是应该立即调用HKObserver QueryCompletionHandler,并为https请求运行一个新的长期运行的后台任务?
您肯定应该启动一个单独的后台任务来执行向服务器的数据传输,并尽快调用HKObserverQueryCompletionHandler
。文档中没有说明在调用处理程序之前可以等待多长时间,因此最安全的做法是尽快调用它。
我在这里发布了一个关于HKObserverQueryCompletionHandler
使用混乱的类似问题,但还没有任何更新。