Optimiza el consumo de energía de tu app

En este documento, se describen las prácticas recomendadas para optimizar el consumo de energía en una app de navegación para dispositivos móviles que compiles con el SDK de Navigation. Al mismo tiempo, se describen las compensaciones que se deben tener en cuenta cuando se emplean estas prácticas. En particular, este documento abarca lo siguiente:

  • Fuentes de alto consumo de energía, clasificadas de mayor a menor
  • Estrategias para optimizar el consumo de energía, en orden de importancia, comenzando con la velocidad de fotogramas
  • Estrategias para usuarios finales para enseñar a los usuarios de tu app a administrar el uso de sus dispositivos mientras navegan

¿Por qué optimizar tu app de navegación?

Según su situación, los usuarios de tu app pueden ejecutar la guía de navegación durante períodos prolongados. Por ejemplo, los conductores y los repartidores pueden trabajar muchas horas y completar tareas en territorios desconocidos. En estos casos, dependen en gran medida de la guía paso a paso en la app. Esto genera algunos problemas típicos:

  • Agotamiento de la batería y disponibilidad de cargadores. El uso intensivo de la navegación puede hacer que las baterías de los dispositivos se agoten más rápido de lo esperado. Si bien muchos usuarios pueden solucionar este problema cargando sus dispositivos en el vehículo, los conductores de vehículos de dos ruedas no pueden hacerlo.
  • Limitación del dispositivo debido al calor. Incluso los usuarios que cargan continuamente sus dispositivos pueden experimentar problemas. El alto consumo de energía durante períodos prolongados puede hacer que el dispositivo se caliente, lo que provoca una limitación térmica y la consiguiente pérdida de rendimiento.

Las apps de navegación paso a paso dependen de funciones que consumen mucha energía, como la pantalla, el GPS y la comunicación por radio con las torres de telefonía celular, por lo que es una práctica recomendada optimizar el uso de energía de tu app para dispositivos móviles. Además, debes tener en cuenta las necesidades de uso de energía de tu público objetivo para poder realizar las compensaciones adecuadas entre el rendimiento y la optimización del consumo de energía.

¿Qué consume más energía?

En esta sección, se dividen las actividades en la app asociadas con el alto consumo de energía en dos categorías:

  • Renderización de pantalla
  • Actualizaciones de ubicación

Renderización de pantalla

La renderización de pantalla suele causar el mayor consumo de energía en las apps de navegación para dispositivos móviles. Cada vez que el dispositivo dibuja un mapa y otros elementos de la IU en la pantalla, depende del procesamiento de la GPU y la CPU. Del mismo modo, cuando el usuario deja esa pantalla encendida durante períodos prolongados, también se usa más energía.

En cierta medida, puedes esperar un alto consumo de energía de los conductores o pasajeros que dependen de un mapa visible para navegar, en especial si usan la app de forma continua durante muchas horas. En este caso, la app también realiza una tasa de renderización más alta en la pantalla porque el mapa se actualiza en tiempo real. En algunos casos, la pantalla puede volver a dibujarse casi de forma continua, en especial cuando el usuario conduce de una ubicación a otra sin detenerse.

Actualizaciones de ubicación

Además de la renderización de pantalla, otras dos actividades de navegación consumen energía del dispositivo:

  • Uso de la torre de telefonía celular y la radio GPS
  • Actualizaciones y uso compartido de la ubicación, como para proporcionar una hora estimada de llegada o informar las posiciones de un vehículo en una flota

La comunicación por GPS y radio celular depende de operaciones de inicio que consumen mucha energía: el GPS debe encontrar satélites y las radios celulares deben negociar con las torres y establecer una conexión. Por estos motivos, se ejecutan de forma continua durante la navegación, aunque las radios celulares permanecen activas durante 20 a 30 segundos para intentar minimizar los costos de inicio. El sistema operativo controla estos parámetros de configuración que no puedes configurar fácilmente en tu app.

En el caso de las actualizaciones de ubicación, el uso de energía varía según factores impredecibles. Por ejemplo, la distancia entre el dispositivo y la estación base celular determina el uso de energía, ya que el dispositivo usará la señal mínima necesaria para continuar con la navegación y evitar cambiar de torres. Por lo tanto, un dispositivo que navega en un área con conectividad deficiente usará más energía que uno que esté cerca de una estación base. Además, es posible que algunas apps compartan actualizaciones de ubicación con un servicio central de administración de flotas y, por lo tanto, deban comunicarse con un servidor para hacerlo.

Optimiza el uso de energía de tu app

El desafío para optimizar el uso de energía en las apps de navegación es que estas dependen en gran medida de recursos que consumen mucha energía, lo que limita tus opciones para mitigar el impacto sin realizar compensaciones, como restringir el uso de la pantalla. En esta sección, se proporciona una lista de enfoques que puedes adoptar cuando optimizas tu app, en orden de mayor a menor impacto.

Cambia la velocidad de fotogramas

La pantalla actualiza lo que muestra con una frecuencia conocida como velocidad de fotogramas. La velocidad de fotogramas suele medirse en fotogramas por segundo (FPS). Debido a que la renderización de pantalla usa mucha CPU o GPU, puedes reducir la velocidad de fotogramas para ahorrar consumo de energía.

La compensación cuando se reduce la velocidad de fotogramas es que la renderización de pantalla puede parecer menos fluida, en especial si el mapa se actualiza con frecuencia. Esto puede ser más obvio cuando se acerca el mapa, cuando el usuario viaja a alta velocidad o cuando cambia la velocidad o la dirección en una gran cantidad.

En dispositivos iOS, el SDK de Maps para iOS expone la preferredFrameRate para controlar la velocidad de fotogramas. En la siguiente tabla, se muestran los valores del enumerador GMSFrameRate que puedes ajustar:

kGMSFrameRatePowerSave

Usa la velocidad de fotogramas mínima para conservar el uso de la batería.

kGMSFrameRateConservative

Usa una velocidad de fotogramas media para proporcionar una renderización más fluida y conservar los ciclos de procesamiento.

kGMSFrameRateMaximum

Usa la velocidad de fotogramas máxima para un dispositivo.

Para dispositivos de gama baja, es de 30 FPS. Para dispositivos de gama alta, es de 60 FPS.

Para obtener información de referencia, consulta GMSFrameRate en la documentación del SDK de Navigation de Google para iOS.

Si bien no puedes controlar cómo el usuario final establece el brillo de la pantalla de su dispositivo ni cuánto tiempo la mantiene encendida, puedes proporcionar una opción para la guía de navegación sin un mapa. Esto permitiría que el usuario final elija esa opción para conservar energía. Por ejemplo, si los conductores trabajan con regularidad en el mismo vecindario, es posible que no necesiten la guía basada en mapas con tanta frecuencia. Para habilitar la navegación sin un mapa, configura un destino y comienza la guía en el SDK de Navigation, pero no muestres un mapa.

Agrega una línea de código para ocultar el GMSMapView:

mapView.isHidden = true

El SDK de Navigation seguirá actualizando las ubicaciones ajustadas a la ruta, la hora estimada de llegada y la distancia restante del viaje, y tu app aún puede suscribirse a todos los eventos que genera el SDK a medida que avanza el conductor. Esto no es adecuado para todos los casos de uso y, por supuesto, no es un buen consejo en los casos en que el conductor necesita ver el mapa y seguir la guía visual. En las siguientes capturas de pantalla, se muestra una comparación en paralelo de la alternancia de las vistas de mapa durante la navegación activa.

App de demostración en ejecución con la vista de mapa visible.
Figura 1.App de demostración para iOS del SDK de Navigation que muestra la demostración de Data Back
App de demostración en ejecución sin una vista de mapa visible.
Figura 2:App de demostración que se ejecuta sin que se vea la vista de mapa. Ten en cuenta que el tiempo y la distancia restantes, así como la ubicación ajustada a la ruta, aún se actualizan.

Usa un estilo de mapa oscuro

Considera diseñar el mapa para usar un tema oscuro y reducir la cantidad de energía necesaria para renderizar el mapa en la pantalla.

El SDK de Navigation renderiza sus mapas con el SDK de Maps para iOS, que contiene opciones para diseñar cualquier vista de mapa que no sea de navegación en tu app. La vista de navegación también admite forzar el modo oscuro. Es posible que esto no afecte a todos los dispositivos de la misma manera debido a las diferencias en el tipo de pantalla, pero permite un posible ahorro de energía en algunos casos. Un estudio reciente descubrió que la cantidad de energía que ahorra el modo oscuro en algunas pantallas depende de qué tan brillante sea la pantalla para comenzar con. Por ejemplo, el modo oscuro ahorra más energía en las pantallas configuradas con brillo máximo que en las pantallas cuyo brillo ya está ajustado al 30-50% del máximo. Esto es importante tener en cuenta cuando se usa el modo oscuro para tus apps, ya que el ahorro de energía será relativo a la forma en que el usuario final configure el brillo de la pantalla.

Para obtener más información sobre cómo modificar la IU de Navigation, consulta Modifica la IU de Navigation.

Captura de pantalla del SDK de Navigation ejecutándose en un iPhone 15 Pro con un diseño de mapa oscuro.
Figura 3.SDK de Navigation configurado con un estilo de mapa oscuro
Configura tu GMSMapView con un mapID que represente un estilo de mapa basado en Cloud definido en tu proyecto.

El diseño de mapas basado en Cloud requiere un ID de mapa que represente una configuración de mapa del servidor que se haya creado en tu proyecto de Google Console. Para obtener más información sobre cómo crear un ID de mapa, consulta la documentación para desarrolladores del ID de mapa documentación. Para obtener más detalles sobre el diseño y la implementación de un estilo de mapa basado en Cloud, consulta la documentación para desarrolladores sobre cómo crear y administrar estilos de mapa basados en Cloud.

Cambia la frecuencia de actualización de la ubicación del GPS

Cuando consideres el uso de energía de las actualizaciones de ubicación enviadas desde el dispositivo, enfócate más en la frecuencia de las actualizaciones de ubicación que en la cantidad de datos enviados en la transmisión.

No es algo que puedas controlar directamente en el SDK de Navigation . Se aplica el mismo consejo para usar fuentes de ubicación que no sean GPS (celular y Wi-Fi).

Informa a tus usuarios

Es posible que los usuarios de tu app quieran saber cómo optimizar su consumo de energía. Para ayudarlos a reducir el consumo de energía en sus apps, recomiéndales que hagan lo siguiente:

  • Bloquea el teléfono
  • Coloca la app de navegación en segundo plano
  • Usa la navegación sin un mapa si es posible
  • Reduce el brillo de la pantalla, ya sea usando el modo oscuro para pantallas OLED y AMOLED, o habilitando el brillo adaptable
  • Mantén el dispositivo fresco
  • Conéctate a la red Wi-Fi del vehículo si está disponible

Mide el consumo de energía

Puedes usar herramientas de nivel profesional para medir el consumo de energía, pero suele ser difícil o costoso obtenerlas. Las apps y las herramientas de generación de perfiles de IDE, como Power Profiler en Android Studio y el panel Battery Usage en XCode Organizer, miden el consumo de energía, pero puede ser difícil quitar el efecto de los procesos en segundo plano o establecer una línea de base de rendimiento para medir. En algunos casos, las restricciones del dispositivo pueden impedir el acceso a los datos necesarios.

Puedes usar hardware de supervisión de energía de propósito especial y modificar la configuración de conexión de la batería. Existen productos y servicios comerciales para ayudarte a hacerlo. Ten en cuenta que modificar los dispositivos de esta manera puede anular la garantía del dispositivo.