Использование местоположения в фоновом режиме может существенно повлиять на срок службы батареи. Android поддерживает ограничения на сбор данных о местоположении в фоновом режиме, что побуждает разработчиков оптимизировать свои приложения для повышения эффективности использования аккумулятора. Эти оптимизации полезны для всех устройств, независимо от версии Android, на которой они работают.
С ограничениями фонового местоположения :
- Сбор данных о местоположении в фоновом режиме ограничивается, местоположение вычисляется и доставляется только несколько раз в час.
- Сканирование Wi-Fi более консервативно, и обновления местоположения не вычисляются, когда устройство остается подключенным к той же статической точке доступа.
- Скорость реагирования геозон меняется от десятков секунд до примерно двух минут. Это изменение повышает производительность аккумулятора — на некоторых устройствах до 10 раз.
Требуемые знания
Этот документ предполагает знакомство со следующими API:
- Службы определения местоположения Google. Эти API обеспечивают более высокую точность и требуют меньше нагрузки на аккумулятор, чем API определения местоположения платформы .
- Поставщик объединенного местоположения. Этот API объединяет сигналы GPS, Wi-Fi и сотовых сетей, а также акселерометра, гироскопа, магнитометра и других датчиков.
- Geofencing . Этот API построен на основе API Fused Location Provider и оптимизирован для работы от батареи.
Понимание разряда аккумулятора
Сбор местоположения и разрядка батареи связаны следующим образом:
- Точность: точность данных о местоположении. В общем, чем выше точность, тем выше расход батареи.
- Частота: как часто вычисляется местоположение. Чем чаще вычисляется местоположение, тем больше расходуется батарея.
- Задержка: как быстро доставляются данные о местоположении. Меньшая задержка обычно требует большего заряда батареи.
Точность
Вы можете указать точность определения местоположения с помощью метода 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()
для сохранения мощности. Рекомендуется значение пять минут или больше.
Дальнейшее чтение
Для получения дополнительной информации см. следующие документы:
- Рекомендации . В этом руководстве изложены некоторые конкретные рекомендуемые действия, которые вы можете использовать, чтобы улучшить влияние вашего приложения на время автономной работы.
- Варианты использования . В этом руководстве представлены несколько распространенных случаев использования служб определения местоположения и способы оптимизации влияния на время автономной работы в этих случаях.