Dies ist der Abschnitt aus der CLLocationManager- Dokumentation, der das App-Verhalten mit startMonitoringSignificantLocationChanges beschreibt :
Wenn Sie diesen Dienst starten und Ihre Anwendung anschließend beendet wird, startet das System die Anwendung automatisch im Hintergrund neu, wenn ein neues Ereignis eintrifft. In diesem Fall enthält das an die Anwendung übergebene Optionswörterbuch: didFinishLaunchingWithOptions: Die Methode Ihres Anwendungsdelegierten enthält den Schlüssel UIApplicationLaunchOptionsLocationKey, der angibt, dass Ihre Anwendung aufgrund eines Standortereignisses gestartet wurde. Nach dem Neustart müssen Sie weiterhin ein Standortmanagerobjekt konfigurieren und diese Methode aufrufen, um weiterhin Standortereignisse zu empfangen. Wenn Sie die Ortungsdienste neu starten, wird das aktuelle Ereignis sofort an Ihren Delegaten übermittelt. Darüber hinaus wird die Location-Eigenschaft Ihres Location Manager-Objekts mit dem neuesten Location-Objekt gefüllt, noch bevor Sie Location Services starten.
Wenn Ihre App beendet wird (und ich gehe davon aus, dass Sie stopMonitoringSignificantLocationChanges nicht von applicationWillTerminate aus aufrufen ), werden Sie mit einem UIApplicationLaunchOptionsLocationKey- Parameter für application: didFinishLaunchingWithOptions geweckt . Zu diesem Zeitpunkt erstellen Sie Ihren CLLocationManager , rufen startMonitoringSignificantLocationChanges auf und führen die Verarbeitung Ihres Hintergrundstandorts für eine begrenzte Zeit durch . Also bin ich mit diesem Stück in Ordnung.
Der vorherige Absatz beschreibt nur, was passiert, wenn die App beendet wird. Er schlägt nicht vor, was Sie tun, wenn die Anwendung angehalten wird. In der Dokumentation zu didFinishLaunchingWithOptions heißt es:
Die Anwendung verfolgt Standortaktualisierungen im Hintergrund, wurde gelöscht und wurde jetzt neu gestartet. In diesem Fall enthält das Wörterbuch einen Schlüssel, der angibt, dass die Anwendung aufgrund eines neuen Standortereignisses neu gestartet wurde.
Es wird vorgeschlagen, dass Sie diesen Anruf erst erhalten, wenn Ihre App (aufgrund einer Standortänderung) nach Beendigung gestartet wird.
Der Absatz über den Dienst für wesentliche Änderungen im Programmierhandbuch zur Standortaufklärung enthält jedoch Folgendes:
Wenn Sie diesen Dienst laufen lassen und Ihre Anwendung anschließend angehalten oder beendet wird, aktiviert der Dienst Ihre Anwendung automatisch, wenn neue Standortdaten eintreffen. Zum Zeitpunkt des Aufwachens wird Ihre Anwendung in den Hintergrund gestellt und erhält eine kleine Zeitspanne für die Verarbeitung der Standortdaten. Da sich Ihre Anwendung im Hintergrund befindet, sollte sie nur minimale Arbeit leisten und alle Aufgaben (z. B. das Abfragen des Netzwerks) vermeiden, die möglicherweise verhindern, dass sie vor Ablauf der zugewiesenen Zeit zurückkehrt. Ist dies nicht der Fall, wird Ihre Anwendung möglicherweise beendet.
Dies deutet darauf hin, dass Sie mit Standortdaten geweckt werden, wenn Ihre App angehalten wurde, ohne jedoch zu erwähnen, wie Sie geweckt wurden:
- Erhält das UIApplicationDelegate einen Rückruf, der mir mitteilt, dass ich von einem angehaltenen Zustand in einen Hintergrundzustand übergehe ?
- Empfängt der Standortmanager (der gefroren war, als die App angehalten wurde) den StandortManager: didUpdateToLocation: fromLocation- Rückrufe?
- Muss ich nur Code in meine didUpdateToLocation- Nachricht implementieren , der den Anwendungsstatus überprüft und im Hintergrundmodus nur eine minimale Verarbeitung durchführt?
Während ich dies aufschreibe, denke ich, dass ich vielleicht gerade meine eigene Frage beantwortet habe, aber es wäre großartig, wenn mein Verständnis davon von jemandem bestätigt würde, der besser informiert ist.