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 crees 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, en este documento, se abordan los siguientes temas:

  • 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 por la velocidad de fotogramas
  • Estrategias para usuarios finales que permiten educar a los usuarios de tu app sobre cómo administrar el uso de sus dispositivos mientras navegan

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

Según su situación, es posible que los usuarios de tu app ejecuten la guía de navegación durante períodos prolongados. Por ejemplo, los conductores y los mensajeros de entregas pueden trabajar muchas horas y completar asignaciones 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 el dispositivo 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 su dispositivo de forma continua pueden experimentar problemas. El consumo de energía elevado durante períodos prolongados puede hacer que el dispositivo se caliente, lo que genera 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 se recomienda 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 que puedas encontrar el equilibrio adecuado 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 un 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 la 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, se basa en el procesamiento de la GPU y la CPU. Del mismo modo, cuando el usuario deja la pantalla encendida durante mucho tiempo, también se consume más energía.

Hasta cierto punto, puedes esperar un alto consumo de energía de los conductores o repartidores que dependen de un mapa visible para navegar, especialmente si usan la app de forma continua durante muchas horas. En este caso, la app también realiza una mayor tasa de renderización en la pantalla, ya que el mapa se actualiza en tiempo real. En algunos casos, la pantalla se puede volver a dibujar casi de forma continua, en especial cuando el usuario conduce de un lugar a otro sin detenerse.

Actualizaciones de ubicación

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

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

Tanto el GPS como la comunicación por radio móvil dependen de operaciones de inicio que consumen mucha energía: el GPS debe encontrar satélites y las radios móviles 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 móviles permanecen activas durante 20 o 30 segundos para intentar minimizar los costos de inicio. El sistema operativo controla estos parámetros de configuración, que no puedes establecer 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 móvil 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 torre. Por lo tanto, un dispositivo que navega en un área con conectividad deficiente consumirá más energía que uno que esté cerca de una estación base. Además, algunas apps pueden compartir actualizaciones de ubicación con un servicio central de administración de flotas y, por lo tanto, necesitarán comunicarse con un servidor para lograrlo.

Optimiza el uso de energía de tu app

El desafío de 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 hacer concesiones, 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, que suele medirse en fotogramas por segundo (FPS). Debido a que la renderización de la pantalla usa un procesamiento significativo de CPU y GPU, puedes reducir la velocidad de fotogramas para ahorrar energía.

Cuando reduces la velocidad de fotogramas, la renderización del mapa y los gestos interactivos (como el desplazamiento lateral, el zoom o la rotación) pueden parecer menos fluidos. Para equilibrar la eficiencia energética con una experiencia del usuario responsiva, puedes mantener una velocidad de fotogramas de referencia baja y aumentarla de forma dinámica durante las interacciones activas del usuario.

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

Valor de Swift Valor de Objective-C Descripción
.powerSave kGMSFrameRatePowerSave Usa la velocidad de fotogramas mínima para ahorrar batería.
.conservative kGMSFrameRateConservative Usa una velocidad de fotogramas media para proporcionar una renderización más fluida y conservar los ciclos de procesamiento.
.maximum kGMSFrameRateMaximum Usa la velocidad de fotogramas máxima para un dispositivo (30 FPS para dispositivos de gama baja y 60 FPS para dispositivos de gama alta).

Para obtener más información, consulta GMSFrameRate en la documentación del SDK de Navigation para iOS.

Para establecer directamente la velocidad de fotogramas preferida, asigna un valor a mapView.preferredFrameRate:

Swift

// Reduce the frame rate to conserve battery:
mapView.preferredFrameRate = .powerSave

Objective-C

// Reduce the frame rate to conserve battery:
mapView.preferredFrameRate = kGMSFrameRatePowerSave;

Ajusta la velocidad de fotogramas de forma dinámica durante los gestos

Las velocidades de fotogramas más bajas pueden hacer que las interacciones del usuario (como el desplazamiento lateral, el zoom y la rotación) se sientan entrecortadas. Puedes mantener las interacciones fluidas y, al mismo tiempo, ahorrar energía aumentando temporalmente la velocidad de fotogramas al máximo durante los gestos del usuario y, luego, volviendo a una velocidad de fotogramas que ahorre energía cuando finalice el gesto.

Para ello, adopta el protocolo GMSMapViewDelegate y, luego, implementa los siguientes métodos:

  1. En mapView:willMove:, verifica si el movimiento de la cámara se inició con un gesto del usuario. Si gesture es true, establece preferredFrameRate en el valor máximo.
  2. En mapView:idleAtCameraPosition:, restablece preferredFrameRate al modo de ahorro de energía cuando la cámara esté inactiva.

En el siguiente ejemplo de código, se muestra cómo ajustar de forma dinámica la velocidad de fotogramas durante los gestos del usuario:

Swift

class YourViewController: UIViewController {

  @IBOutlet weak var mapView: GMSMapView!

  override func viewDidLoad() {
    super.viewDidLoad()
    mapView.delegate = self

    // Set a baseline low frame rate to conserve power:
    mapView.preferredFrameRate = .powerSave
  }
}

// MARK: - GMSMapViewDelegate
extension YourViewController: GMSMapViewDelegate {
  func mapView(_ mapView: GMSMapView, willMove gesture: Bool) {
    // Increase frame rate during user gestures for smooth interaction:
    if gesture {
      mapView.preferredFrameRate = .maximum
    }
  }

  func mapView(_ mapView: GMSMapView, idleAt position: GMSCameraPosition) {
    // Restore the power-saving frame rate when gestures finish:
    mapView.preferredFrameRate = .powerSave
  }
}

Objective-C

@interface YourViewController : UIViewController <GMSMapViewDelegate>
@end

@implementation YourViewController {
  GMSMapView *_mapView;
}

- (void)viewDidLoad {
  [super viewDidLoad];
  _mapView.delegate = self;

  // Set a baseline low frame rate to conserve power:
  _mapView.preferredFrameRate = kGMSFrameRatePowerSave;
}

#pragma mark - GMSMapViewDelegate

- (void)mapView:(GMSMapView *)mapView willMove:(BOOL)gesture {
  // Increase frame rate during user gestures for smooth interaction:
  if (gesture) {
    mapView.preferredFrameRate = kGMSFrameRateMaximum;
  }
}

- (void)mapView:(GMSMapView *)mapView
    idleAtCameraPosition:(GMSCameraPosition *)position {
  // Restore the power-saving frame rate when gestures finish:
  mapView.preferredFrameRate = kGMSFrameRatePowerSave;
}

@end

Si bien no puedes controlar cómo el usuario final configura el brillo de la pantalla de su dispositivo ni cuánto tiempo mantiene la pantalla 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 ahorrar energía. Por ejemplo, si los conductores trabajan con regularidad en el mismo vecindario, es posible que no necesiten orientación basada en mapas con tanta frecuencia. Para habilitar la navegación sin un mapa, puedes establecer un destino y iniciar la guía en el SDK de Navigation, pero sin mostrar 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 recorrido, y tu app podrá seguir suscribiéndose a todos los eventos que genera el SDK a medida que el conductor avanza. Esto no es apropiado para todos los casos de uso y 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 cómo se alternan 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 vista de mapa visible.
Figura 2.App de demostración en ejecución sin vista de mapa visible. Observa que el tiempo y la distancia restantes, así como la ubicación ajustada a la ruta, se siguen actualizando.

Usa un diseño de mapa oscuro

Considera aplicar un diseño de mapa que use un tema oscuro para 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 aplicar diseño a cualquier vista de mapa que no sea de navegación en tu app. La vista de navegación también admite el modo oscuro forzado. 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. En un estudio reciente, se descubrió que la cantidad de energía que ahorra el modo oscuro en algunas pantallas depende del brillo inicial de la pantalla. Por ejemplo, el modo oscuro ahorra más energía en pantallas con brillo máximo que en pantallas con brillo ajustado entre el 30% y el 50% del máximo. Es importante tener esto en cuenta cuando uses el modo oscuro en tus apps, ya que el ahorro de energía dependerá de cómo el usuario final configure el brillo de la pantalla.

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

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 diseño de mapa oscuro
Configura tu GMSMapView con un ID de mapa que represente un diseño 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 la consola de Google. Para obtener más información sobre cómo crear un ID de mapa, consulta la documentación para desarrolladores sobre el ID de mapa. Para obtener más detalles sobre cómo diseñar e implementar 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.

Cómo cambiar la frecuencia de actualización de la ubicación GPS

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

No es algo que puedas controlar directamente en el SDK de Navigation. El mismo consejo se aplica al uso de fuentes de ubicación que no sean de GPS (red móvil 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.
  • Pon 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 automático.
  • 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 el Generador de perfiles de energía en Android Studio y el panel de uso de batería 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 un modelo de referencia de rendimiento para realizar mediciones. En algunos casos, las restricciones del dispositivo pueden impedir que se obtenga acceso a los datos necesarios.

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