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 batería. Android admite límites para la recopilación de ubicaciones en segundo plano, lo que les 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, puedes hacer 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) en algunos dispositivos.

Conocimientos requeridos

En este documento, se supone que conoces las siguientes APIs:

Cómo interpretar el agotamiento de la batería

La recopilación de la ubicación 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: Indica con qué frecuencia 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.

Precisión

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 usando tantas entradas como sea necesario (GPS, Wi-Fi y red móvil, y utiliza una variedad de sensores), y puede causar un agotamiento significativo de la batería.
  • PRIORITY_BALANCED_POWER_ACCURACY proporciona una ubicación precisa al mismo tiempo que optimiza el consumo. Rara vez utiliza el GPS. Por lo general, usa una combinación de información de Wi-Fi y redes móviles 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 gran precisión (al nivel de una ciudad) con un consumo mínimo de batería.
  • PRIORITY_NO_POWER recibe ubicaciones de forma pasiva de otras apps para las que esta ya se haya calculado.

Usa las opciones de consumo equilibrado o de bajo consumo 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 que 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:

Pasa el valor más alto posible cuando uses setIntervalMillis(). Esto es así, en especial, para la recopilación de la ubicación 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 introducidos en Android 8.0 (nivel de API 26) aplican estas estrategias, pero tu app debería esforzarse por aplicarlas en dispositivos que ejecuten Android 7.0 (nivel de API 24) y versiones anteriores.

Latencia

Puedes especificar la latencia con el método setMaxUpdateDelayMillis(), pasando un valor que es varias veces mayor que el intervalo especificado en el método setIntervalMillis(). Esta configuración retrasa la entrega de la ubicación, y las actualizaciones de varias ubicaciones pueden entregarse en lotes. Estos dos cambios ayudan a minimizar el consumo de batería.

Si tu app no necesita una actualización de ubicación al instante, deberías pasar el mayor valor posible al método setMaxUpdateDelayMillis(), cambiando de manera efectiva la latencia por más datos y eficiencia de la batería.

Cuando se usan geovallados, las apps deberían pasarle un valor alto al método setNotificationResponsiveness() para preservar baterí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 describen algunas acciones 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 en esos casos.