Información acerca de la ubicación en segundo plano y la duración de la batería

El uso de la ubicación en segundo plano puede afectar significativamente la duración de la batería. Android admite límites para la recopilación de ubicaciones en segundo plano, lo que solicita a los desarrolladores que optimicen sus aplicaciones para mejorar la eficiencia de la batería. Estas optimizaciones son beneficiosas para todos los dispositivos, independientemente de la versión de Android que ejecuten.

Con los límites de ubicación en segundo plano, ocurre lo siguiente:

  • Se limita la recopilación de la ubicación en segundo plano, se calcula la ubicación en primer plano y se envían los datos correspondientes solo unas pocas veces por hora.
  • Las búsquedas Wi-Fi son más eficientes y no se calculan las actualizaciones de ubicación cuando el dispositivo permanece conectado al mismo punto de acceso estático.
  • La capacidad de respuesta del geovallado cambia de decenas de segundos a aproximadamente dos minutos. Este cambio mejora el rendimiento de la batería, hasta 10 veces más en algunos dispositivos.

Conocimientos requeridos

En este documento, se da por sentado que conoces las siguientes APIs:

Cómo interpretar el agotamiento de la batería

La recopilación de ubicaciones y el agotamiento de la batería se relacionan de la siguiente manera:

  • Precisión: Es la precisión de los datos de ubicación. En general, cuanto mayor sea la precisión, mayor será el agotamiento de la batería.
  • Frecuencia: Es la frecuencia con la que se calcula la ubicación. Cuanto más frecuente sea el cálculo de la ubicación, mayor será el uso de la batería.
  • Latencia: Es la rapidez con la que se entregan los datos de ubicación. Por lo general, una menor latencia requiere más batería.

Exactitud

Puedes especificar la precisión de la ubicación con el método setPriority() y pasar uno de los siguientes valores como argumento:

  • PRIORITY_HIGH_ACCURACY proporciona la ubicación más precisa posible, que se calcula con la mayor cantidad de entradas necesarias (habilita el GPS, el Wi-Fi y la red móvil, y usa una variedad de sensores), y puede causar un agotamiento significativo de la batería.
  • PRIORITY_BALANCED_POWER_ACCURACY proporciona una ubicación precisa y, al mismo tiempo, optimiza el consumo de energía. Rara vez usa el GPS. Por lo general, usa una combinación de información de Wi-Fi y de red móvil para calcular la ubicación del dispositivo.
  • PRIORITY_LOW_POWER depende en gran medida de las torres de telefonía celular y evita las entradas de GPS y Wi-Fi, lo que proporciona una precisión aproximada (a nivel de ciudad) con un consumo mínimo de batería.
  • PRIORITY_PASSIVE recibe ubicaciones de forma pasiva de otras apps para las que ya se calculó la ubicación.

Usa las opciones de consumo de energía equilibrado o bajo para satisfacer las necesidades de ubicación de la mayoría de las apps. Reserva la precisión alta para las apps que se ejecutan en primer plano y requieren actualizaciones de ubicación en tiempo real (por ejemplo, una app de mapas).

Frecuencia

Puedes especificar la frecuencia de ubicación utilizando dos métodos:

  • Usa el método setIntervalMillis() para especificar el intervalo en el que se calcula la ubicación de tu app.
  • Usa el método setMinUpdateIntervalMillis() para especificar el intervalo en el que se recibirán las ubicaciones de otras apps.

Pasa el valor más grande posible cuando uses setIntervalMillis(). Esto es especialmente cierto para la recopilación de ubicaciones en segundo plano, que suele agotar la batería. Reserva intervalos de unos pocos segundos para los casos de uso en primer plano.

Los límites de ubicación en segundo plano que se introdujeron en Android 8.0 (nivel de API 26) aplican estas estrategias, pero tu app debe esforzarse por aplicarlas en dispositivos que ejecutan Android 7.0 (nivel de API 24) y versiones anteriores.

Latencia

Puedes especificar la latencia con el método setMaxUpdateDelayMillis(), que suele pasar un valor varias veces mayor que el intervalo especificado en el método setIntervalMillis(). Este parámetro de configuración retrasa la entrega de la ubicación, y es posible que se entreguen varias actualizaciones de ubicación en lotes. Estos dos cambios ayudan a minimizar el consumo de batería.

Si tu app no necesita una ubicación actualizada de inmediato, debes pasar el valor más grande posible al método setMaxUpdateDelayMillis(), lo que intercambia de manera eficaz la latencia por más datos y eficiencia de la batería.

Cuando se usan geovallas, las apps deben pasar un valor grande al método setNotificationResponsiveness() para conservar la energía. Se recomienda un valor de cinco minutos o más.

Lecturas adicionales

Para obtener más información, consulta los siguientes documentos:

  • Recomendaciones: En esta guía, se presentan algunas acciones recomendadas concretas que puedes usar para mejorar el impacto de tu app en la duración de batería.
  • Casos de uso: En esta guía, se proporcionan varios casos de uso comunes en los que podrías usar los servicios de ubicación y cómo podrías optimizar el impacto en la duración de batería para esos casos.