Ce document décrit les bonnes pratiques à suivre pour optimiser la consommation d'énergie dans une application de navigation mobile que vous créez à l'aide du SDK Navigation. En même temps, il décrit les compromis à prendre en compte lors de l'utilisation de ces pratiques. Ce document traite en particulier des points suivants :
- Sources de consommation d'énergie élevée, classées de la plus élevée à la plus faible.
- Stratégies d'optimisation de la consommation d'énergie, par ordre d'importance, en commençant par la fréquence d'images.
- Stratégies pour les utilisateurs finaux afin d'expliquer aux utilisateurs de votre application comment gérer l'utilisation de leur appareil pendant la navigation.
Pourquoi optimiser votre application de navigation ?
Selon leur situation, les utilisateurs de votre application peuvent exécuter le guidage de navigation pendant de longues périodes. Par exemple, les chauffeurs et les livreurs peuvent travailler de longues heures et effectuer des missions dans des zones qu'ils ne connaissent pas. Dans ce cas, ils s'appuient fortement sur la navigation détaillée intégrée à l'application. Cela entraîne des problèmes courants :
- Décharge de la batterie et disponibilité des chargeurs. Une utilisation intensive de la navigation peut entraîner une décharge plus rapide que prévu de la batterie de l'appareil. Si de nombreux utilisateurs peuvent résoudre ce problème en rechargeant leur appareil dans leur véhicule, ce n'est pas le cas des conducteurs de deux-roues.
- Limitation de l'appareil en raison de la chaleur. Même les utilisateurs qui rechargent constamment leur appareil peuvent rencontrer des problèmes. Une consommation d'énergie élevée sur de longues périodes peut entraîner une surchauffe de l'appareil, ce qui peut provoquer un étranglement thermique et une perte de performances.
Les applications de navigation détaillée s'appuient sur des fonctionnalités gourmandes en énergie, telles que l'écran, le GPS et la communication radio avec les antennes-relais. Il est donc recommandé d'optimiser la consommation d'énergie de votre application mobile. De plus, vous devez tenir compte des besoins de consommation d'énergie de votre audience cible afin de trouver le bon compromis entre performances et optimisation de la consommation d'énergie.
Qu'est-ce qui consomme le plus d'énergie ?
Cette section divise les activités au sein de l'application associées à une consommation d'énergie élevée en deux catégories :
- Rendu de l'écran
- Mises à jour de position
Rendu de l'écran
Le rendu de l'écran est généralement la principale cause de consommation d'énergie dans les applications de navigation mobile. Chaque fois que l'appareil dessine une carte et d'autres éléments d'interface utilisateur à l'écran, il s'appuie sur le traitement du GPU et du CPU. De même, lorsque l'utilisateur laisse l'écran allumé pendant de longues périodes, cela consomme également plus d'énergie.
Dans une certaine mesure, vous pouvez vous attendre à une consommation d'énergie élevée de la part des conducteurs ou des passagers qui s'appuient sur une carte visible pour naviguer, en particulier s'ils utilisent l'application en continu pendant de nombreuses heures. Dans ce scénario, l'application effectue également un rendu plus rapide à l'écran, car la carte est alors mise à jour en temps réel. Dans certains cas, l'écran peut se redessiner presque en continu, en particulier lorsque l'utilisateur se déplace d'un endroit à un autre sans s'arrêter.
Mises à jour de position
Outre l'affichage de l'écran, deux autres activités de navigation consomment de l'énergie :
- Utilisation des antennes-relais et du GPS
- Mises à jour et partage de la position, par exemple pour fournir une heure d'arrivée prévue ou signaler la position d'un véhicule d'une flotte.
Les communications radio GPS et cellulaires reposent toutes deux sur des opérations de démarrage gourmandes en énergie : le GPS doit trouver des satellites, et les cellules GSM doivent négocier avec les tours et établir une connexion. Pour ces raisons, elles s'exécutent en continu pendant la navigation, même si les cellules GSM restent actives pendant 20 à 30 secondes pour tenter de réduire les coûts de démarrage. Le système d'exploitation contrôle ces paramètres, que vous ne pouvez pas facilement configurer dans votre application.
Pour les mises à jour de la position, la consommation d'énergie varie en fonction de facteurs imprévisibles. Par exemple, la distance entre l'appareil et la station de base cellulaire détermine la consommation d'énergie, car l'appareil utilise le signal minimal nécessaire pour continuer la navigation afin d'éviter de changer de tour. Par conséquent, un appareil naviguant dans une zone où la connectivité est faible consomme plus d'énergie qu'un appareil situé à proximité d'une station de base. De plus, certaines applications peuvent partager les mises à jour de position avec un service de gestion de parc centralisé et doivent donc communiquer avec un serveur pour ce faire.
Optimiser la consommation d'énergie de votre application
Le défi de l'optimisation de la consommation d'énergie dans les applications de navigation est que ces applications dépendent fortement de ressources énergivores, ce qui limite vos options pour atténuer l'impact sans faire de compromis, comme restreindre l'utilisation de l'écran. Cette section fournit une liste d'approches que vous pouvez adopter pour optimiser votre application, de la plus efficace à la moins efficace.
Modifier la fréquence d'images
L'écran met à jour ce qu'il affiche à une fréquence appelée "fréquence d'images", généralement mesurée en images par seconde (FPS). Étant donné que l'affichage de l'écran utilise une quantité importante de ressources CPU et GPU, vous pouvez réduire la fréquence d'images pour économiser de l'énergie.
Lorsque vous réduisez la fréquence d'images, le rendu de la carte et les gestes interactifs (comme le panoramique, le zoom ou la rotation) peuvent sembler moins fluides. Pour trouver un équilibre entre l'efficacité énergétique et une expérience utilisateur réactive, vous pouvez maintenir une fréquence d'images de base faible et l'augmenter de manière dynamique lors des interactions actives de l'utilisateur.
Sur les appareils iOS, le SDK Maps pour iOS expose la propriété preferredFrameRate surGMSMapView pour contrôler la fréquence d'images. Le tableau suivant indique les valeurs GMSFrameRate que vous pouvez ajuster :
| Valeur Swift | Valeur Objective-C | Description |
|---|---|---|
.powerSave |
kGMSFrameRatePowerSave |
Utilisez la fréquence d'images minimale pour économiser la batterie. |
.conservative |
kGMSFrameRateConservative |
Utilisez une fréquence d'images moyenne pour obtenir un rendu plus fluide et économiser des cycles de traitement. |
.maximum |
kGMSFrameRateMaximum |
Utilisez la fréquence d'images maximale d'un appareil (30 FPS pour les appareils bas de gamme, 60 FPS pour les appareils haut de gamme). |
Pour en savoir plus, consultez GMSFrameRate dans la documentation du SDK Navigation pour iOS.
Pour définir directement la fréquence d'images préférée, attribuez une valeur à 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;
Ajuster la fréquence d'images de manière dynamique pendant les gestes
Une fréquence d'images plus faible peut donner une impression de saccade lors des interactions utilisateur (comme le panoramique, le zoom et la rotation). Vous pouvez maintenir la fluidité des interactions tout en économisant de l'énergie en augmentant temporairement la fréquence d'images au maximum pendant les gestes de l'utilisateur, puis en revenant à une fréquence d'images économe en énergie lorsque le geste se termine.
Pour ce faire, adoptez le protocole GMSMapViewDelegate et implémentez les méthodes suivantes :
- Dans
mapView:willMove:, vérifiez si le mouvement de la caméra a été initié par un geste de l'utilisateur. Sigestureest défini surtrue, définissezpreferredFrameRatesur "maximum". - Dans
mapView:idleAtCameraPosition:, rétablissez le mode Économie d'énergie depreferredFrameRatelorsque la caméra devient inactive.
L'exemple de code suivant montre comment ajuster dynamiquement la fréquence d'images lors des gestes de l'utilisateur :
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
Naviguer sans carte
Bien que vous ne puissiez pas contrôler la façon dont l'utilisateur final définit la luminosité de l'écran de son appareil ou la durée pendant laquelle il le laisse allumé, vous pouvez proposer une option de guidage de navigation sans carte. Cela permettrait à l'utilisateur final de choisir cette option pour économiser de l'énergie. Par exemple, si les conducteurs travaillent régulièrement dans le même quartier, ils n'auront peut-être pas besoin d'un guidage cartographique aussi souvent. Vous pouvez activer la navigation sans carte en définissant une destination et en lançant le guidage dans le SDK Navigation, mais sans afficher de carte.
Ajoutez une ligne de code pour masquer GMSMapView :
mapView.isHidden = true
Le SDK Navigation continuera de mettre à jour les positions alignées sur la route, l'heure d'arrivée prévue et la distance restante du trajet. Votre application pourra toujours s'abonner à tous les événements déclenchés par le SDK au fur et à mesure de la progression du conducteur. Cette option n'est pas adaptée à tous les cas d'utilisation et n'est pas recommandée lorsque le conducteur doit voir la carte et suivre les instructions visuelles. Les captures d'écran suivantes illustrent une comparaison côte à côte de l'activation/désactivation des vues de carte pendant la navigation active.
|
|
Utiliser un style de carte sombre
Envisagez d'appliquer un thème sombre à la carte pour réduire la quantité d'énergie nécessaire à son affichage à l'écran.
Le SDK Navigation affiche ses cartes à l'aide du SDK Google Maps pour iOS, qui contient des options permettant de styliser toutes les vues de carte sans navigation dans votre application. La vue de navigation permet également de forcer le mode sombre. Cela peut ne pas affecter tous les appareils de la même manière en raison des différences de type d'écran, mais cela permet d'économiser de l'énergie dans certains cas. Une étude récente a révélé que la quantité d'énergie économisée par le mode sombre sur certains écrans dépend de la luminosité de l'écran au départ. Par exemple, le mode sombre permet d'économiser plus d'énergie sur les écrans réglés sur la luminosité maximale que sur les écrans dont la luminosité est déjà réglée sur 30 à 50 % du maximum. Il est important de prendre en compte ce point lorsque vous utilisez le mode sombre pour vos applications, car les économies d'énergie dépendent de la façon dont l'utilisateur final règle la luminosité de son écran.
Pour en savoir plus sur la modification de l'UI de navigation, consultez Modifier l'UI de navigation.
Les styles de cartes basés dans le cloud nécessitent un ID de carte qui représente une configuration de carte côté serveur créée dans votre projet de la console Google. Pour en savoir plus sur la création d'un ID de carte, consultez la documentation pour les développeurs sur les ID de carte. Pour en savoir plus sur la conception et le déploiement d'un style de carte basé dans le cloud, consultez la documentation pour les développeurs sur la création et la gestion des styles de cartes basés dans le cloud.
Modifier la fréquence de mise à jour de la position GPS
Lorsque vous tenez compte de la consommation d'énergie des notifications de position envoyées par l'appareil, concentrez-vous davantage sur la fréquence des notifications de position que sur la quantité de données envoyées lors de la transmission.
Vous ne pouvez pas contrôler directement ce comportement dans le SDK Navigation. Le même conseil s'applique à l'utilisation de sources de localisation non GPS (cellulaire et Wi-Fi).
Informez vos utilisateurs
Les utilisateurs de votre application peuvent vouloir savoir comment optimiser leur consommation d'énergie. Pour aider les utilisateurs à réduire la consommation d'énergie de leurs applications, conseillez-leur de procéder comme suit :
- Verrouiller le téléphone
- Mettez l'application de navigation en arrière-plan
- Utiliser la navigation sans carte si possible
- Réduisez la luminosité de l'écran, soit en utilisant le mode sombre pour les écrans OLED et AMOLED, soit en activant la luminosité adaptative.
- Maintenez l'appareil au frais
- Se connecter au Wi-Fi du véhicule, si disponible
Mesurer la consommation d'énergie
Vous pouvez utiliser des outils de qualité professionnelle pour mesurer la consommation d'énergie, mais ils sont souvent difficiles ou coûteux à obtenir. Les outils de profilage des applications et des IDE, tels que le profileur de puissance d'Android Studio et le volet "Battery Usage" (Utilisation de la batterie) de XCode Organizer, mesurent la consommation d'énergie, mais il peut être difficile de supprimer l'effet des processus en arrière-plan ou de définir une référence de performances à mesurer. Dans certains cas, les restrictions de l'appareil peuvent empêcher l'accès aux données nécessaires.
Vous pouvez utiliser du matériel de surveillance de l'alimentation spécialisé et modifier la configuration de la connexion de la batterie. Des produits et services commerciaux existent pour vous aider à le faire. Notez que la modification d'appareils de cette manière peut annuler la garantie de l'appareil.