2016-03-31 4 views
2

私はiOSアプリケーションでHKObserverQuerybackground deliveryを使用しています。 HKObserverQueryのupdateHandlerでは、クエリ(HKAnchoredObjectQuery)を実行し、結果をhttps経由でリモートサーバーに送信します。しかし、遅い接続(EDGEなど)や大量のデータ(たとえば手順)では、データ送信に最大1分かかることがあります。 HKObserverQueryCompletionHandlerにdocumentationからHKObserverQueryCompletionHandlerタイムアウト?

HealthKitアプリを復帰したとき、それは新しいデータに一致するオブザーバクエリの更新ハンドラを呼び出します。このブロックは、更新ハンドラに渡されます。着信データの処理が終了するとすぐにこのブロックを呼び出す必要があります。このブロックを呼び出すと、正常にバックグラウンドデータを受信したことがHealthKitに伝えられます。このブロックを呼び出さないと、HealthKitは引き続きバックオフアルゴリズムを使用してアプリを起動しようとします。アプリが3回応答しない場合、HealthKitはあなたのアプリがデータを受信できないとみなし、バックグラウンドアップデートの送信を停止します。

私の質問は、HKObserverQueryCompletionHandlerに電話する必要があります。私のアプリは、HealthKitが「ハングした」とみなされる前に呼び出す必要がありますか? 代わりにHKObserverQueryCompletionHandlerとすぐに電話し、run a new long-running background taskをhttpsリクエストに使用する必要がありますか?

答えて

0

サーバーへのデータ転送を実行し、できるだけ早くHKObserverQueryCompletionHandlerを呼び出すには、別のバックグラウンドタスクを開始する必要があります。ドキュメントでは、ハンドラを呼び出す前にどれくらい待つことができるかについては何も示していないので、できるだけ早く呼び出すことが最も安全です。

HKObserverQueryCompletionHandlerhereの混乱について同様の質問がありましたが、更新はありませんでした。