Это раздел из CLLocationManager документации, описывающей поведение приложения с помощью startMonitoringSignificantLocationChanges:
Если вы запустите эту услугу и свою приложение впоследствии завершена, система автоматически возобновляет приложение в если придет новое событие. В такой случай, словарь опций перешел к применение: didFinishLaunchingWithOptions: метод вашего приложения содержит ключ UIApplicationLaunchOptionsLocationKey чтобы указать, что ваша заявка была запущен из-за события местоположения. После перезапуска вы все равно должны настроить объект менеджера местоположений и вызовите этот метод для продолжения получение событий местоположения. Когда ты перезапустить службы определения местоположения, текущий мероприятие доставляется вашему делегату немедленно. Кроме того, местоположение имущество вашего менеджера по местоположению объект заполнен наиболее недавний объект местоположения еще до вас услуги по началу работы.
Итак, я понимаю, что если ваше приложение завершается (и я предполагаю, что вы не вызываете stopMonitoringSignificantLocationChanges из applicationWillTerminate), вы проснетесь с параметром UIApplicationLaunchOptionsLocationKey до application:didFinishLaunchingWithOptions. В этот момент вы создаете CLLocationManager, вызываете startMonitoringSignificantLocationChanges и выполните обработку фонового местоположения для ограниченного времени. Поэтому я в порядке с этим.
В предыдущем параграфе говорится только о том, что происходит, когда приложение прекращается, оно не предполагает, что вы делаете, когда приложение приостановлено. В документации для didFinishLaunchingWithOptions говорится:
Приложение отслеживает местоположение обновления в фоновом режиме, был очищен, и теперь возобновлен. В этом case, словарь содержит ключ что приложение было возобновлено из-за нового местоположения событие.
Предполагая, что вы получите этот вызов только после того, как ваше приложение будет запущено (из-за изменения местоположения) после того, как вы закончите.
Однако абзац Служба значимых изменений в Программирование осведомленности о местоположении В руководстве есть следующее:
Если вы оставите эту службу запущенной и ваша заявка впоследствии приостановлено или прекращено, услуга автоматически просыпается приложение, когда новые данные о местоположении прибывает. При пробуждении приложение помещается на задний план и с учетом небольшого обрабатывать данные местоположения. Потому как ваше приложение находится в фоновом режиме, он должен выполнять минимальную работу и избегать любые задачи (например, запрос сети), которые могут возвращение до назначенного времени истекает. Если это не так, приложение может быть прервано.
Это говорит о том, что вы проснулись с данными о местоположении, если ваше приложение было приостановлено, но не упоминает, как вы проснулись:
- Получает ли UIApplicationDelegate обратный вызов, сообщающий мне, что я возобновляю из приостановленного состояния в фоновое состояние?
- Помогает ли менеджер местоположений (который был заморожен при приостановке приложения) начинает получать locationManager:didUpdateToLocation:fromLocation обратные вызовы?
- Нужно ли мне просто реализовать код в сообщении didUpdateToLocation, которое проверяет состояние приложения и выполняет минимальную обработку в фоновом режиме?
В процессе написания этого, я думаю, я, возможно, просто ответил на свой вопрос, но было бы здорово, если бы мое понимание этого подтвердилось кем-то более осведомленным.