Optimiser l'accès au réseau

L'utilisation du signal radio sans fil pour transférer des données est potentiellement l'une des de décharger la batterie. Pour réduire la décharge de la batterie avec l'activité réseau, il est essentiel que vous compreniez comment votre connectivité affecte le matériel radio sous-jacent.

Cette section présente la machine à états radio sans fil et explique comment votre le modèle de connectivité de l'application interagit avec elle. Il propose ensuite plusieurs techniques qui, lorsqu'elles sont suivies, aideront à minimiser l'effet des données de votre application de la batterie.

Machine à états de la radio

La radio sans fil de l'appareil de l'utilisateur est dotée de fonctionnalités d'économie d'énergie intégrées qui pour minimiser la quantité d'énergie consommée par la batterie. Lorsqu'elle est entièrement active, la radio sans fil consomme une puissance importante, mais lorsqu'elle est inactive ou en veille, elle consomme très peu d'énergie.

N'oubliez pas que la radio ne peut pas passer de la veille à l'état entièrement actif instantanément. Une période de latence est associée à la mise sous tension de la radio. Ainsi, la batterie passe d’un état d’énergie plus élevé à permet de réduire la consommation d'énergie lentement afin d'économiser de l'énergie lorsque l'appareil n'est pas utilisé de réduire la latence associée au démarrage la radio.

La machine à états d'une radio réseau 3G typique se compose de trois états d'énergie :

  • Pleine puissance: utilisé lorsqu'une connexion est active, ce qui permet à l'appareil de pour transférer des données à son débit le plus élevé possible.
  • Énergie faible : état intermédiaire qui réduit la consommation d'énergie de la batterie d'environ 50 %.
  • Veille : état de consommation d'énergie minimale pendant lequel aucune connexion réseau n'est active.

Bien que les états "low" (faible) et "standby" (veille) déchargent beaucoup moins la batterie, ils introduisent également une latence importante dans les requêtes réseau. Le retour à la pleine puissance à partir de l'état faible prend environ 1,5 seconde, et le passage de la veille à la pleine puissance peut prendre plus de deux secondes.

Pour minimiser la latence, la machine à états utilise un délai pour retarder la transition vers des états d'énergie plus faibles. La figure 1 utilise les temps de latence d'AT&T pour une radio 3G typique.


Figure 1 : Machine à états radio sans fil 3G typique.

La machine à états radio sur chaque appareil, en particulier la transition associée de retard ("tail time") et la latence au démarrage, varient en fonction du signal radio (3G, LTE, 5G, etc.) utilisée. Elle est définie et configurée par le réseau de l'opérateur sur lequel l'appareil fonctionne.

Cette page décrit une machine à états représentative pour une radio sans fil 3G typique, basée sur les données fournies par AT&T. Cependant, les principes généraux et les meilleures pratiques qui en résultent sont applicables à toutes les implémentations de radio sans fil.

Cette approche est particulièrement efficace pour la navigation Web mobile classique, car elle empêche les latences indésirables lorsque les utilisateurs naviguent sur le Web. La valeur relativement faible "tail-time" garantit également qu'une fois la session de navigation terminée, la radio peut passer à un état d'énergie inférieur.

Malheureusement, cette approche peut entraîner la création d'applications inefficaces sur les smartphones modernes comme Android, où les applications s'exécutent au premier plan est importante) et en arrière-plan (où l'autonomie par ordre de priorité).

Impact des applications sur la machine à états radio

Chaque fois que vous créez une connexion réseau, la radio passe à l'état de pleine puissance. Dans le cas de la machine d'état radio 3G typique décrite précédemment, elle restera à pleine puissance pendant toute la durée de votre transfert (plus cinq secondes de temps de queue supplémentaires), suivie de 12 secondes à l'état basse consommation d'énergie. Ainsi, pour un appareil 3G classique, chaque session de transfert de données radio pour dessiner de l'énergie pendant au moins 18 secondes.

En pratique, cela signifie qu'une application qui effectue un transfert de données d'une seconde, trois fois par minute, maintiendra la radio sans fil perpétuellement active, la ramenant à une puissance élevée juste au moment où elle passe en mode veille.


Figure 2 : Consommation relative de la puissance radio sans fil pour le transfert d'une seconde trois fois par minute. Le chiffre n'inclut pas les options "Power-up" entre les exécutions.

En comparaison, si la même application a regroupé ses données, en exécutant une seule transfert de trois secondes toutes les minutes, cela maintient la radio à la puissance pendant un total de seulement 20 secondes par minute. Cela permettrait à la radio d'être en veille pendant 40 secondes toutes les minutes, ce qui entraînerait une réduction significative de la consommation de la batterie.


Figure 3 : Consommation d'énergie radio sans fil relative pour les transferts de trois secondes exécutés une fois par minute.

Techniques d'optimisation

Maintenant que vous comprenez l'impact de l'accès au réseau sur l'autonomie de la batterie, voyons comment quelques conseils pour réduire la décharge de la batterie d'offrir une expérience utilisateur rapide et fluide.

Regrouper les transferts de données

Comme indiqué dans la section précédente, regrouper vos transferts de données en transférant moins souvent plus de données est l'un des meilleurs moyens l'efficacité.

Bien sûr, ce n'est pas toujours possible si votre application doit recevoir ou d'envoyer des données immédiatement en réponse à une action de l'utilisateur. Vous pouvez atténuer ce problème en d'anticiper et de précharger les données. D'autres scénarios, tels que l'envoi de journaux ou d'analyses à un serveur et d'autres transferts de données non urgents déclenchés par l'application, se prêtent très bien au traitement par lot et au regroupement. Reportez-vous à la section Optimisation lancée par l'application d'assistance pour pour planifier les transferts réseau en arrière-plan.

Prérécupération des données

Le préchargement des données est un autre moyen efficace de réduire le nombre les sessions de transfert de données exécutées par votre application. Avec le préchargement, lorsque l'utilisateur effectue une action dans votre application, elle anticipe les données qui seront probablement nécessaires pour la prochaine série d'actions de l'utilisateur et les extrait en une seule rafale, via une seule connexion, à pleine capacité.

En chargeant vos transferts en amont, vous réduisez le nombre d'activations radio nécessaires pour télécharger les données. Vous économisez ainsi la batterie, mais vous améliorez également la latence, réduisez la bande passante requise et réduisez les temps de téléchargement.

Le préchargement améliore également l'expérience utilisateur en réduisant la latence dans l'application causée par l'attente de la fin des téléchargements avant d'effectuer une action ou d'afficher des données.

Voici un exemple concret.

Un lecteur d'actualités

De nombreuses applications d'actualités essaient de réduire la bande passante en ne téléchargeant les titres qu'après un a été sélectionnée, des articles complets uniquement si l'utilisateur souhaite les lire, et des miniatures à mesure qu'elles défilent à l'écran.

Avec cette approche, la radio est forcée de rester active pour la majorité des sessions de lecture d'actualités des utilisateurs lorsqu'ils font défiler les titres, changent de catégorie et lisent des articles. De plus, le passage constant entre les états énergétiques entraîne une latence importante lors du changement de catégorie ou de la lecture d'articles.

Une meilleure approche consiste à précharger une quantité raisonnable de données au démarrage, en commençant par le premier ensemble de titres et de miniatures. de démarrage à faible latence, tout en continuant avec les autres titres et miniatures, ainsi que le texte de chaque article disponible sur au moins la liste des titres principaux.

Une autre option consiste à précharger chaque titre, miniature, texte d'article et éventuellement même des images complètes d'articles, généralement en arrière-plan selon un calendrier prédéterminé. Cette approche risque de consommer une bande passante et une autonomie de la batterie importantes en téléchargeant des contenus qui ne sont jamais utilisés. Elle doit donc être implémentée avec prudence.

Facteurs supplémentaires

Bien que le préchargement des données présente de nombreux avantages, il est utilisé de manière trop agressive le préchargement présente également un risque d'augmentation de la décharge de la batterie et de la bande passante utiliser, ainsi que le quota de téléchargement, en téléchargeant les données qui ne sont pas utilisées. C’est aussi important de veiller à ce que le préchargement ne retarde pas le démarrage de l'application app attend que le préchargement se termine. Concrètement, cela peut signifier traiter les données progressivement ou lancer des transferts consécutifs, hiérarchisés de sorte que les données requises pour le démarrage de l'application soient téléchargées et traitées en premier.

L'intensité du préchargement des données dépend de la taille des données téléchargées et de la probabilité qu'elles soient utilisées. À titre indicatif, compte tenu des la machine à états décrite précédemment, pour les données qui ont 50% de chances d'être utilisées dans la session utilisateur en cours, le préchargement dure environ six secondes (environ 1 à 2 mégaoctets) avant le coût potentiel du téléchargement des applications inutilisées les données correspondent aux économies potentielles si elles ne sont pas téléchargées, pour commencer.

De manière générale, il est recommandé de précharger les données de façon à doivent lancer un nouveau téléchargement toutes les 2 à 5 minutes, dans l'ordre de 1 à 5 mégaoctets.

Conformément à ce principe, les téléchargements volumineux (tels que les fichiers vidéo) doivent être téléchargés par segments à intervalles réguliers (toutes les deux à cinq minutes), en préchargeant uniquement les données vidéo susceptibles d'être visionnées dans les prochaines minutes.

Une solution consiste à planifier le téléchargement complet uniquement lorsque vous êtes connecté à Wi-Fi, et éventuellement uniquement lorsque l'appareil est en charge. La API WorkManager prend en charge exactement ce cas d'utilisation, ce qui vous permet de limiter le travail en arrière-plan tant que l'appareil ne répond pas aux critères spécifiés par le développeur, en cours de connexion au Wi-Fi.

Vérifier la connectivité avant d'effectuer des requêtes

La recherche d'un signal cellulaire est l'une des opérations les plus énergivores sur un appareil mobile. Pour les requêtes déclenchées par l'utilisateur, il est recommandé de vérifier d'abord une connexion en utilisant ConnectivityManager, comme indiqué dans Surveiller l'état de la connectivité et la connexion mesure. En l'absence de réseau, l'application peut économiser la batterie en ne forçant pas la radio mobile. pour effectuer une recherche. Vous pouvez alors planifier et exécuter la requête de manière groupée lorsqu'une connexion est établie.

Connexions de pools

En plus du traitement par lot et du préchargement, vous pouvez également regrouper les connexions réseau de votre application.

Il est généralement plus efficace de réutiliser les connexions réseau existantes que d'en créer de nouvelles. La réutilisation des connexions permet également au réseau de réagir plus intelligemment à la congestion et aux problèmes de données réseau associés.

HttpURLConnection et la plupart des clients HTTP, tels que OkHttp, activent le regroupement de connexions par défaut et réutilisent la même connexion pour plusieurs requêtes.

Résumé et perspectives d'avenir

Dans cette section, vous avez appris beaucoup de choses sur la radio sans fil et certaines stratégies que vous pouvez appliquer de manière générale pour offrir une expérience utilisateur rapide et réactive tout en réduisant l'épuisement de la batterie.

Dans la section suivante, nous examinerons en détail trois types distincts de d'interactions réseau communes à la plupart des applications. Vous découvrirez les pilotes de chacun de ces types, ainsi que les techniques et les API modernes pour gérer efficacement ces interactions.