Límites de ubicación en segundo plano

A fin de reducir el consumo de energía, Android 8.0 (nivel de API 26) limita la frecuencia con la cual las apps que se ejecutan en segundo plano pueden obtener la ubicación actual del usuario. Las apps pueden recibir actualizaciones de ubicación solo unas pocas veces por hora.

Nota: Estas limitaciones se aplican a todas las apps que se usan en dispositivos con Android 8.0 (API nivel 26) o versiones posteriores, independientemente de la versión del SDK de destino de la app.

Se debe prestar especial atención a este comportamiento de obtención de la ubicación si tu app se basa en alertas en tiempo real o en la detección de movimiento cuando se ejecuta en segundo plano.

El sistema distingue entre las apps en primer y segundo plano. Se considera que una app está en primer plano si se cumple con alguna de las siguientes condiciones:

  • Tiene una actividad visible, independientemente de si esta se inició o está detenida.
  • Tiene un servicio en primer plano.
  • Si otra app en primer plano está conectada a la app, ya sea por vinculación de uno de sus servicios o uso de uno de sus proveedores de contenido. Por ejemplo, si una app en primer plano se vincula a cualquiera de los siguientes componentes dentro de otra app, se considera que esa otra app se encuentra en primer plano:

Si no se cumple ninguna de esas condiciones, entonces se considera que la app se encuentra en segundo plano.

Se preserva el comportamiento de la aplicación en primer plano

Si una app se encuentra en primer plano en un dispositivo que ejecuta Android 8.0 (nivel de API 26), el comportamiento de actualización de la ubicación es el mismo que en Android 7.1.1 (nivel de API 25) y versiones anteriores.

Advertencia: Si tu app obtiene actualizaciones de ubicación casi en tiempo real en un período prolongado, la duración de batería del dispositivo se reducirá considerablemente.

Cómo ajustar el comportamiento de ubicación de tu app

Considera la posibilidad de que los resultados no sean correctos en los casos prácticos de tu app en segundo plano si esta recibe actualizaciones de ubicación poco frecuentes. Si este es el caso, puedes obtener actualizaciones de ubicación con mayor frecuencia mediante una de las siguientes acciones:

  • Haz que tu aplicación pase a funcionar en primer plano.
  • Inicia un servicio en primer plano en tu app mediante una llamada a startForegroundService(). Cuando este servicio en primer plano esté activo, aparecerá como una notificación constante en el área de notificaciones.
  • Usa elementos de la API de geovallado, como el GeofencingClient, que están optimizados para minimizar el uso de energía.
  • Usa un objeto de escucha de ubicación pasivo, que podría recibir actualizaciones de ubicación más rápidas si hay apps en primer plano que las solicitan con mayor frecuencia.

Nota: Si tu app necesita acceder al historial de ubicaciones que contiene las actualizaciones frecuentes, usa la versión por lotes de los elementos de la API del proveedor de ubicación combinada, como la interfaz FusedLocationProviderApi. Cuando tu app se ejecuta en segundo plano, esta API recibe la ubicación del usuario con mayor frecuencia que la API que no se procesa por lotes. Sin embargo, ten en cuenta que tu app igualmente recibirá actualizaciones por lotes, solo que pocas veces por hora.

API afectadas

Los cambios en el comportamiento de obtención de la ubicación en apps en segundo plano afectan a las siguientes API:

Proveedor de ubicación combinada (FLP)
  • Si tu app se ejecuta en segundo plano, el servicio del sistema de ubicación registra una nueva ubicación para tu app solo unas pocas veces por hora, lo que sucede incluso cuando tu app solicita actualizaciones de ubicación con mayor frecuencia.

    No obstante, si usas la versión por lotes de FLP, puedes acceder a un historial de ubicaciones más frecuentes luego de que tu app recibe una actualización por lote, lo que también ocurre solo unas pocas veces por hora.

  • Si tu app se ejecuta en primer plano, no producirá ningún cambio en las tasas de muestreo de la ubicación en comparación con Android 7.1.1 (nivel de API 25).
Geovallado
  • Las apps en segundo plano pueden obtener eventos de transición de geovallado con mayor frecuencia que las actualizaciones del Proveedor de ubicación combinada.
  • La capacidad de respuesta promedio para un evento de geovallado es cada un par de minutos aproximadamente.
Medidas GNSS y mensajes de navegación GNSS
Administrador de ubicación
  • Las apps en segundo plano reciben actualizaciones de ubicación solo unas pocas veces por hora.

    Nota: Si tu app se ejecuta en un dispositivo que tiene los servicios de Google Play instalados, te recomendamos encarecidamente que uses el Proveedor de ubicación combinada (FLP) en su lugar.

Administrador de Wi-Fi
El método startScan() realiza un análisis completo de las apps en segundo plano solo unas pocas veces por hora. Si una app en segundo plano vuelve a llamar al método poco después, la clase WifiManager mostrará los resultados almacenados en caché del análisis anterior.