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, будут некоторые фоновые задачи... это изменит исчисление для компромисса между этими двумя методами?) Кто-нибудь имеет представление о том, как эти два сравниваются?
Большое спасибо! С нетерпением ждем, если мы сможем понять, как сравнить эти методы.
Ответы
Ответ 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