Это раздел из документации CLLocationManager, описывающий поведение приложения с startMonitoringSignificantLocationChanges:Поведение при значительном изменении местоположения API при завершении/приостановлении?
Если запустить эту услугу и ваши приложения впоследствии прекращается, система автоматически приложение запускается снова в фон, если а прибывает новое событие. В таком случае, варианты словарь передаваемый в применение: didFinishLaunchingWithOptions: метода вашего приложения делегата содержит ключ UIApplicationLaunchOptionsLocationKey , чтобы указать, что приложение было запущен из-за событие местонахождения. После перезапуска необходимо, чтобы вы все еще установили объект менеджера местоположений и вызывают этот метод для продолжения получения событий местоположения. Когда вы оказываете услуги по отправке рестарта, текущее событие будет доставлено вашему делегату немедленно. Кроме того, местоположение Недвижимость вашего менеджера по местоположению объект заселен самым большим объектом недавнего размещения еще до вас услуги по отправке на стартовую позицию.
Так я понимаю, что если ваше приложение завершает работу (и я предполагаю, что если вы не вызываете stopMonitoringSignificantLocationChanges от applicationWillTerminate) вы будите с UIApplicationLaunchOptionsLocationKey параметром application:didFinishLaunchingWithOptions. В этот момент вы создаете свой CLLocationManager, звоните startMonitoringSignificantLocationChanges и выполняете обработку фонового местоположения для limited time. Так что я в порядке с этим.
В предыдущем параграфе говорится только о том, что происходит, когда приложение завершается, оно не предполагает, что вы делаете, когда приложение приостановлено. Документация didFinishLaunchingWithOptions говорит:
приложение отслеживает местоположение обновления в фоновом режиме, продували, и теперь возобновлен. В этом случае словарь содержит ключ , указывающий, что приложение было повторно запущено из-за нового местоположения событие.
Предлагая, чтобы вы получили этот звонок только после запуска вашего приложения (из-за изменения местоположения) после того, как вы были прекращены.
Однако этот пункт на Significant Change Service в Location Awareness Programming Guide имеет сказать следующее:
Если оставить этот ход службы и приложения впоследствии приостановлено или прекращено, служба автоматически просыпается ваш при получении новых данных о местоположении . Во время пробуждения ваше приложение помещается на задний план и получает небольшое количество времени до обрабатывает данные о местоположении.Поскольку приложение работает в фоновом режиме, он должен делать минимальную работу и избежать любых задач (например, запрашивая сети), которые могли бы предотвратить его возвращение до отведенного времени истекает. Если это не так, ваше приложение может быть прервано.
Это говорит о том вы проснулись с данными о местоположении, если ваше приложение было приостановлено, но не упоминает о том, как вы проснулись:
- ли UIApplicationDelegate получить обратный вызов, говоря мне, что я докачку из приостановленного состояния в фоновое состояние?
- Помогает ли менеджер местоположения (который был заморожен при приостановке приложения) начинает получать обратные вызовы locationManager:didUpdateToLocation:fromLocation?
- Должен ли я просто реализовать код в своем сообщении didUpdateToLocation, который проверяет состояние приложения и выполняет минимальную обработку, если в фоновом режиме?
В процессе написания этого, я думаю, я, возможно, просто ответил на свой вопрос, но было бы здорово, если бы мое понимание этого подтвердилось кем-то более осведомленным.
Вычеркнуто №6 в моем ответе, чтобы не путать людей. – Aaron
Ах круто ... Спасибо @Tegeril :) – RedBlueThing
По иронии судьбы, я тоже чувствовал ту же путаницу, когда развивался для значительных изменений. Я все еще сомневаюсь в том, что произойдет, если приложение будет закрыто. не произойдет ли обратный вызов UIApplicationDelegate? это правильный способ запуска приложения. если диспетчер местоположений еще не запущен, как он может получать уведомления в фоновом режиме? (время для некоторых исследований и разработок) – darshansonde