Подтвердить что ты не робот

CLLocationManager geo-fencing/startMonitoringForRegion: vs. startMonitoringForSignificantLocationChanges: по сравнению с 10-минутным запуском вызовов

Я пытаюсь настроить приложение, которое сможет проверять местоположение людей в фоновом режиме, посмотреть, находятся ли они в определенном месте и отправить пинг на сервер, если они есть. Мы не хотим истощать энергию наших пользователей, поэтому мы пытаемся найти оптимальное решение.

Я сделал существенное чтение, и я не нашел очень много информации об этих методах. Я пойду через плюсы и минусы, как я их понимаю прямо сейчас

startMonitoringForSignificantChanges

Описание. Исходя из изменений в wi-fi и ячейке, система пробуждает приложение.

Документы:

Приложения могут ожидать уведомления, как только устройство перемещается на 500 метров или более от его предыдущего уведомления. Он не должен ожидать уведомления чаще, чем раз в пять минут. Если устройство может извлекать данные из сети, диспетчер местоположений гораздо чаще доставляет уведомления своевременно.

Плюсы:

  • Большая эффективность батареи

Минусы:

  • В зависимости от изменений в wi-fi/ячейке.
  • Можно только предположить, что это будет называться каждые 200 м до 2 км (если не больше в определенных областях)
  • Подробнее о точности
  • Таким образом, непоследовательность и неточность

10-минутный запуск обновления или "n-минутное обновление":

Описание. Это в основном запрашивает у приложения больше времени, когда истечет дополнительное время, оно вызывает [self.locationManager startUpdating], захватывает местоположение и расширяет фоновый поток еще на 10 минут.

Плюсы:

  • Согласованный
  • Может быть настолько точным, насколько вы хотите, чтобы он был таким же последовательным, как вы хочу его

Минусы:

  • Выполнять вызов каждые десять минут или меньше, чтобы приложение работало в background (т.е. n не может превышать 10 для вызовов)

Вопросы: Какое влияние это оказывает на батарею? Происходит ли пробуждение GPS и его отключение больнее? Я не мог себе представить, что запуск короткой проверки местоположения на заднем плане сильно разрядит батарею... но опять же, я не знаю, что включает в себя включение GPS и получение полезного сигнала.

startMonitoringForRegion (гео-фехтование):

Проще говоря, ваше приложение пробуждается, когда вы входите в заранее определенный регион. Это их странность, она более поздняя, ​​и на ней меньше документации. Я не могу найти хорошее описание того, как "система контролирует" пересечение границы. Для всех, кого я знаю, это какой-то действительно умный алгоритм, или они постоянно пингоруют GPS, что сделает его менее эффективным, чем другие методы для этого.

Плюсы:

  • Простая реализация
  • Управляемый системой, поэтому вам не нужно изобретать свои собственные специальные гео-ограждения. Только триггеры на пересечении границ... нет лишних данных, которые нужно просто выбросить в обмен на батарею.
  • Таким образом, он должен быть лучшим для такого рода вещей, точным, управляемым системой.

Минусы:

  • Люди сомневаются в его эффективности
  • Огромные конфликты в отношении того, хорошо ли это для аккумулятора или если оно значительно сокращает срок службы батареи.
  • Как система отслеживает это??
  • В принципе, неопределенное поведение.

Я думаю, мой вопрос сводится к тому, как startMonitoringForRegion: сравните с этими другими методами тестирования местоположения пользователя в фоновом режиме, когда дело доходит до времени автономной работы, согласованности и точности. Кто-нибудь тщательно проверил это? Или использовали его в своем приложении и получили хотя бы некоторую обратную связь? Вероятно, для моих целей компромисс между гео-фехтованием и 10-минутным методом обновления. (Также учитывая, что Apple публично заявила об iOS7, будут некоторые фоновые задачи... это изменит исчисление для компромисса между этими двумя методами?) Кто-нибудь имеет представление о том, как эти два сравниваются?

Большое спасибо! С нетерпением ждем, если мы сможем понять, как сравнить эти методы.

4b9b3361

Ответ 1

Я работаю над отслеживанием транспортных средств с помощью GPS в течение 2 лет. Многому научился... В моем опыте startMonitoringForRegion или Geo-фехтование зависит от событий изменения ячейки, события didEnter или didExit не срабатывают, пока не произойдет событие изменения ячейки /wifi. Таким образом, это не влияет на потребление батареи w.r.t. Однако он делает дополнительные вычисления, которые зависят от того, сколько регионов в настоящее время контролируется. Даже приложение Apple Reminder не дает хороших результатов для напоминаний, основанных на местоположении, потому что оно использует гео-фехтование.

Другой подход, запускающий GPS в течение n минут после каждого m-minutes, является хорошим вариантом, он не должен влиять на срок службы батареи, если сделать это с умом. Что именно влияет на постоянную активацию батареи в режиме высокой точности. Например, если вы включили GPS с kCLLocationAccuracyBest и дистанционным фильтром = 0, вы можете буквально наблюдать за дренажем батареи, и вскоре ваше устройство также начнет нагреваться.

Если бы я был вами, я бы пошел на включение GPS каждые 10 минут в течение 5 секунд с помощью kCLLocationAccuracyBest (или может kCLLocationAccuracyNearestTenMeters использовать меньше батареи, если точность не так уж важна) и дистанционный фильтр = 5 (метров). Потребление батареи в этом случае будет незаметным. Вы можете играть с подобными настройками, которые могут удовлетворить ваш конкретный случай и, наконец, узнать, что лучше всего вы.

BTW: iPhone использует AGPS, A-GPS дополнительно использует сетевые ресурсы для поиска и использования спутников в плохих условиях сигнала. Итак, когда вы запуститеUpdatingLocation, он также будет использовать информацию о соседней ячейке. см. http://en.wikipedia.org/wiki/Assisted_GPS