О фоновом местоположении и времени автономной работы

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

С ограничениями фонового местоположения :

  • Сбор данных о местоположении в фоновом режиме ограничивается, местоположение вычисляется и доставляется только несколько раз в час.
  • Сканирование Wi-Fi более консервативно, и обновления местоположения не вычисляются, когда устройство остается подключенным к той же статической точке доступа.
  • Скорость реагирования геозон меняется от десятков секунд до примерно двух минут. Это изменение повышает производительность аккумулятора — на некоторых устройствах до 10 раз.

Требуемые знания

Этот документ предполагает знакомство со следующими API:

Понимание разряда аккумулятора

Сбор местоположения и разрядка батареи связаны следующим образом:

  • Точность: точность данных о местоположении. В общем, чем выше точность, тем выше расход батареи.
  • Частота: как часто вычисляется местоположение. Чем чаще вычисляется местоположение, тем больше расходуется батарея.
  • Задержка: как быстро доставляются данные о местоположении. Меньшая задержка обычно требует большего заряда батареи.

Точность

Вы можете указать точность определения местоположения с помощью метода setPriority() , передав в качестве аргумента одно из следующих значений:

  • PRIORITY_HIGH_ACCURACY обеспечивает наиболее точное местоположение, которое вычисляется с использованием необходимого количества входных данных (он включает GPS, Wi-Fi и сотовую связь, а также использует различные датчики ) и может привести к значительному разряду батареи.
  • PRIORITY_BALANCED_POWER_ACCURACY обеспечивает точное местоположение и оптимизирует энергопотребление. Очень редко использует GPS. Обычно для вычисления местоположения устройства используется комбинация данных Wi-Fi и сотовой сети.
  • PRIORITY_LOW_POWER в основном полагается на вышки сотовой связи и избегает входов GPS и Wi-Fi, обеспечивая грубую точность (на уровне города) с минимальным расходом заряда батареи.
  • PRIORITY_NO_POWER пассивно получает местоположения от других приложений, для которых местоположение уже вычислено.

Используйте параметры сбалансированной мощности или низкого энергопотребления, чтобы удовлетворить потребности большинства приложений в определении местоположения. Зарезервируйте высокую точность для приложений, которые работают на переднем плане и требуют обновления местоположения в реальном времени (например, картографическое приложение).

Частота

Вы можете указать частоту местоположений двумя способами:

  • Используйте метод setinterval() , чтобы указать интервал для вычисления местоположения вашего приложения.
  • Используйте метод setFastestInterval() , чтобы указать интервал получения местоположений других приложений.

Передайте максимально возможное значение при использовании setInterval() . Это особенно актуально для фонового сбора данных о местоположении, что часто разряжает батарею. Зарезервируйте интервалы в несколько секунд для случаев приоритетного использования.

Ограничения фонового местоположения, введенные в Android 8.0 (уровень API 26), обеспечивают соблюдение этих стратегий, но ваше приложение должно стремиться применять их на устройствах под управлением Android 7.0 (уровень API 24) и ниже.

Задержка

Вы можете указать задержку с помощью метода setMaxWaitTime() , обычно передавая значение, которое в несколько раз превышает интервал, указанный в методе setInterval() . Этот параметр задерживает доставку местоположения, и несколько обновлений местоположения могут доставляться пакетами. Эти два изменения помогают минимизировать расход заряда батареи.

Если вашему приложению не требуется немедленное обновление местоположения, вам следует передать максимально возможное значение в метод setMaxWaitTime() , эффективно обменивая задержку на больший объем данных и эффективность использования батареи.

При использовании геозон приложения должны передавать большое значение в метод setNotificationResponsiveness() для сохранения мощности. Рекомендуется значение пять минут или больше.

Дальнейшее чтение

Для получения дополнительной информации см. следующие документы:

  • Рекомендации . В этом руководстве изложены некоторые конкретные рекомендуемые действия, которые вы можете использовать, чтобы улучшить влияние вашего приложения на время автономной работы.
  • Варианты использования . В этом руководстве представлены несколько распространенных случаев использования служб определения местоположения и способы оптимизации влияния на время автономной работы в этих случаях.