C'est la section de la CLLocationManager de la documentation décrivant l'application de comportement avec les startMonitoringSignificantLocationchanges:
Si vous démarrez ce service et votre l'application est par la suite terminé, le système automatiquement relance de l'application dans le arrière-plan si un nouvel événement arrive. Dans un tel cas, les options de dictionnaire passé à la application:didFinishLaunchingWithOptions: méthode de votre application délégué contient la clé UIApplicationLaunchOptionsLocationkey pour indiquer que votre demande a été lancé en raison de l'emplacement de l'événement. Sur la relance, vous devez toujours configurer l'emplacement de l'objet gestionnaire et cette méthode est appelée à continuer lieu de réception des événements. Lorsque vous redémarrez les services de localisation, l'actuel l'événement est livré à votre délégué immédiatement. En outre, l'emplacement propriété du gestionnaire de votre emplacement l'objet est rempli avec le plus de récente de l'emplacement de l'objet avant même de vous démarrer les services de localisation.
Si ma compréhension est que si votre application se termine (et je suppose que si vous n'appelez pas stopMonitoringSignificantLocationchanges de applicationWillTerminate, vous obtenez réveillé avec un UIApplicationLaunchOptionsLocationkey paramètre d' application:didFinishLaunchingWithOptions. À ce stade, vous créez votre CLLocationManager, appel startMonitoringSignificantLocationchanges et de faire de votre arrière-plan de traitement pour un temps limité. Donc, je suis très bien avec ce peu.
Le paragraphe précédent ne parle que de ce qui se passe lorsque l'application est terminée, il ne suggère pas ce que vous faites lorsque l'application est suspendue. La documentation pour didFinishLaunchingWithOptions dit:
L'application détecte l'emplacement les mises à jour en arrière-plan, a été purgée, et a maintenant été relancée. Dans ce cas, le dictionnaire contient une clé indiquant que la demande a été relancé en raison d'un nouvel emplacement de l'événement.
Ce qui suggère que vous ne recevrez de cet appel lorsque votre application est lancée (en raison d'un changement de lieu) après que vous avez été licencié.
Toutefois, le paragraphe sur le Changement Significatif de Service dans l' Emplacement de Sensibilisation Guide de Programmation a ceci à dire:
Si vous laissez ce service en cours d'exécution et votre demande est ensuite suspendu ou résilié, le service réveille automatiquement votre application lorsque de nouvelles données de localisation arrive. Au réveil, votre application est en arrière-plan et une petite quantité de temps à traiter les données de localisation. Parce que votre application est en arrière-plan, il devrait faire un minimum de travail et d'éviter toutes les tâches (telles que l'interrogation de la réseau) qui pourrait l'empêcher de retour avant le temps imparti expire. Si elle ne le fait pas, votre l'application peut être résilié.
Cela donne à penser que vous êtes réveillé avec des données de localisation si votre application a été suspendue, mais ne parvient pas à parler de la façon dont vous êtes réveillé:
- Le UIApplicationDelegate obtenir un rappel de me dire que je suis la reprise d'un état de suspension dans un arrière-plan de l'état?
- Le lieu manager (qui a été lyophilisé lorsque l'application a été suspendue) commencez à recevoir locationManager:didUpdateToLocation:fromLocation rappels?
- Dois-je tout simplement besoin de mettre en œuvre le code dans mon didUpdateToLocation message qui vérifie l'état de l'application et ne minime de traitement si en mode arrière-plan?
Dans le processus de l'écriture, je crois que je viens de répondre à ma propre question, mais il serait bon d'avoir ma compréhension de cette confirmée par quelqu'un de plus compétent.