HKObserverQuery
hat die folgende Methode, die das Empfangen von Updates im Hintergrund unterstützt:
- initWithSampleType:predicate:updateHandler:
Das updateHandler
hat eine completionHandler
mit folgender Dokumentation :
Dieser Block wird an den Update-Handler übergeben. Sie müssen diesen Block aufrufen, sobald Sie mit der Verarbeitung der eingehenden Daten fertig sind. Durch Aufrufen dieses Blocks wird HealthKit mitgeteilt, dass Sie die Hintergrunddaten erfolgreich empfangen haben. Wenn Sie diesen Block nicht aufrufen, versucht HealthKit weiterhin, Ihre App mithilfe eines Backoff-Algorithmus zu starten. Wenn Ihre App nicht dreimal reagiert, geht HealthKit davon aus, dass Ihre App keine Daten empfangen kann, und sendet keine Hintergrundaktualisierungen mehr.
Wenn man sich andere Beiträge ansieht, scheint es eine Menge Verwirrung um diesen Handler zu geben. Im Folgenden sind einige Fragen aufgeführt, die ich dazu habe:
- Wann sollte der Handler angerufen werden? Wenn der Anruf zu spät erfolgt, könnte HK der Ansicht sein, dass die App das Abfrage-Update nie erhalten hat, sodass Sie den 3-Strikes-Back-Off-Algorithmus für das Hintergrund-Update verwenden. In der Dokumentation wird angegeben, dass es nach der Bearbeitung anderer Abfragen aufgerufen werden soll. Abhängig davon, wie lange es dauern würde, diese Abfragen auszuführen, scheint es, als könnten Sie gefährlich nahe daran sein, die Hintergrundaktualisierungsschläge zu treffen.
- Warum wird das benötigt? Sollte das System nicht wissen, dass die App gestartet wurde und das Hintergrundupdate erhalten hat? Bei Verwendung
CoreBluetooth
im Hintergrund wird Ihre App nur 10 Sekunden lang im Hintergrund aktiviert. Sie müssen keinen Handler anrufen oder sich mit dem Hintergrundupdate 3-Strikes befassen. - Wenn Sie das Hintergrund-Update 3-Strikes drücken und HK keine Updates mehr sendet, ist das dauerhaft? Sendet HK jemals wieder Hintergrund-Updates? Was ist, wenn es einen Fehler gibt, der den Aufruf des Handlers verhindert hat, und Sie ihn jetzt behoben haben? Steht die App fest und erhält sie nie die Updates? Oder wird es zurückgesetzt, wenn die App neu gestartet oder aktualisiert wird?
- Lässt HK Ihre App im Hintergrund laufen, bis der Handler aufgerufen wird? Ist das Teil seines Zwecks oder nur eine Nebenwirkung? Wenn es Teil seines Zwecks ist, wie lange können wir laufen, bevor wir anhalten müssen (und den ersten Hintergrundaktualisierungsschlag ausführen)?