74 votes

Est-ce que mon application Android épuise la batterie?

Je développe un jeu pour Android. Il utilise une vue de surface et utilise le type d'API de dessin 2D standard fourni. Lorsque j'ai publié le jeu pour la première fois, je faisais toutes sortes de choses bêtes comme redessiner des 9-patches à chaque frame et de même avec du texte. J'ai depuis optimisé une grande partie de cela en dessinant sur des objets Bitmap et en les dessinant à chaque frame, en ne redessinant sur les objets Bitmap que lorsque nécessaire.

J'ai reçu des plaintes concernant la consommation de la batterie auparavant, et après mes modifications j'aimerais savoir (scientifiquement) si j'ai apporté des améliorations. Malheureusement, je n'ai pas de données antérieures à consulter, il serait donc le plus utile de comparer les performances à un autre jeu.

J'utilise Traceview, et utilise les résultats surtout dans le but d'identifier les méthodes consommant du temps CPU.

Alors, quel est le meilleur moyen de déterminer les performances de la batterie de mon application, et quel est un bon benchmark ?

Je sais que je peux regarder les % de différentes applications dans les paramètres, mais cela est à nouveau non scientifique, car la valeur que j'obtiens dépend également de ce qui se passe dans toutes les autres applications. J'ai parcouru (la plupart) de la documentation de Google, et bien que le message soit clair que vous devriez économiser la batterie (et il donne parfois des conseils à ce sujet), il y a peu d'indications sur comment je peux mesurer la performance de mon application. La dernière chose que je veux sont plus de plaintes concernant la consommation de batterie sur le marché Android !

Merci d'avance.


ÉDITER

Merci pour tous vos conseils/suggestions utiles. Ce que je veux vraiment savoir, c'est comment je peux utiliser les données provenant de Traceview (c'est-à-dire le temps CPU en ms passé sur chaque frame du jeu) pour déterminer l'utilisation de la batterie (si cela est possible). En relisant ma question initiale, je peux voir que j'étais un peu vague. Merci encore.

2 votes

Malheureusement, je crains que les métriques du processeur ne soient pas suffisantes. Par exemple, l'envoi d'un petit paquet de données toutes les 5 secondes sur le réseau consommera plus que l'envoi de nombreux paquets à la fois, puis de se taire pendant une minute. Il en va probablement de même pour les capteurs et le GPS

41voto

Kingsolmn Points 828

Voici ma suggestion :

Je surveille la consommation d'énergie en développant mes applications (qui parfois polluent les capteurs à des taux inférieurs à 25ns) en utilisant PowerTutor. Allez voir, cela pourrait être ce que vous recherchez, l'application vous indique ce que vous utilisez en mW, J, ou par rapport au reste du système. De plus, les résultats sont subdivisés par CPU, WiFi, Display, (autres radios installées). Le seul petit inconvénient est qu'elle est conçue pour un modèle de téléphone particulier, mais je l'utilise avec grand succès sur mon EVO 4G, Galaxy S (Sprint Epic), et Hero.

Bonne chance, -Steve

0 votes

Merci d'être le seul à répondre directement à ma question ! Je vais essayer ce que vous suggérez, puis accepter votre réponse.

0 votes

Np, j'avais peur d'être complètement à côté de la plaque en fonction de la façon dont tout le monde répondait. Mais, les autres réponses nous aideront tous les deux je pense, plein de bons conseils pour éviter que l'application ne consomme trop d'énergie, ce qui entraîne sa désinstallation par l'utilisateur!

0 votes

PowerTutor est une super application qui m'a beaucoup aidé, mais elle ne inclut pas l'utilisation du GPS dans les détails de l'application. Dr Power est une excellente application complémentaire pour cela. Il ne montre pas de graphiques mais inclut plus de modules dans les détails de l'application.

20voto

Wroclai Points 15042

Il est possible que votre jeu épuise la batterie. Je crois que cela dépend de plusieurs raisons, qui se lisent comme suit :

  • Votre application est un jeu. Les jeux épuisent rapidement la batterie.
  • Vous itérez avec l'aide d'un Thread. Avez-vous limité les FPS pour que le CPU saute les itérations inutiles ? Comme vous travaillez en 2D, je suppose que vous utilisez le SurfaceView. 60 FPS seront suffisants pour un jeu en temps réel.
  • Vous ne stoppez pas le Thread lorsque votre application se termine. Par conséquent, vous réitérez le code lorsque votre application n'est pas active.
  • Avez-vous un verrou d'itération qui effectue un wait(); pendant onPause ?

Les personnes qui commentent que votre jeu est en train de vider la batterie visent probablement lorsque votre application n'est pas en cours d'utilisation. Sinon, ce serait étrange car chaque jeu sur le marché Android épuise la batterie - plus ou moins.

0 votes

En fait, le problème que vous soulevez est un que j'avais résolu il y a quelque temps par exactement la méthode de votre dernier point : l'utilisation du processeur pendant la pause du jeu était très élevée, mais en ajoutant wait() dans la boucle de pause, le problème a été résolu. J'ai récemment surveillé toutes mes applications avec Watchdog et mon application n'a jamais été détectée au-dessus du seuil.

0 votes

J'ai du mal à voir que la batterie se décharge si les points ci-dessus ont été corrigés. Ces points sont la façon la plus réaliste de résoudre la consommation d'énergie. Imaginez cela - comment peut votre jeu utiliser la batterie si les points ci-dessus sont vérifiés?

6voto

EboMike Points 39257

Si vous essayez d'évaluer l'« amélioration par rapport à votre version précédente », je ne pense pas qu'il soit logique de la comparer à un autre jeu ! À moins que ces deux jeux fassent exactement la même chose, cela ne peut pas être plus non scientifique.

À la place, je récupérerais la version précédente de votre application depuis le contrôle de source, je la lancerais, je la mesurerais, puis je la lancerais avec le code le plus récent et je la comparerais à nouveau.

Pour comparer, vous pourriez par exemple utiliser l'outil en ligne de commande "top" (certainement disponible dans busybox si votre téléphone est rooté, pas sûr s'il est livré avec un téléphone standard. Probablement pas). Cela vous montre l'utilisation du processeur de votre processus en pourcentage.

1 votes

C'est une bonne idée et cela vaut la peine d'essayer, mais je ne pense pas que mes utilisateurs se soucient de savoir si les performances de mon application se sont améliorées. Je pense juste qu'ils ne veulent pas voir une énorme consommation de batterie qu'ils peuvent associer à mon application. Je sais que c'est un peu contradictoire avec ce que j'ai dit "scientifique", mais ce que je veux vraiment savoir, ce n'est pas "quelle est la meilleure utilisation de la batterie" mais "quelle est la plus appropriée". Et ensuite, on voit...

2 votes

"Approprié" est totalement subjectif. Personne ne peut vous donner une réponse à cela.

0 votes

Un bon jeu avec des graphismes spectaculaires utilisera considérablement le processeur. Mais c'est pour cela que toute la puissance de calcul du processeur est disponible. Si vous êtes vraiment préoccupé, vous pourriez ajouter un mode "léger" qui rend les visuels plus statiques mais avec une fraction de l'effort du processeur.

2voto

Kingsolmn Points 828

Comment puis-je utiliser les données provenant de Traceview (c'est-à-dire le temps CPU en ms passé sur chaque image du jeu) pour déterminer la consommation de la batterie (si cela est possible)

En théorie, il serait possible d'extrapoler la consommation de batterie pour votre application en examinant la consommation d'énergie image par image. La meilleure façon d'accomplir cela serait d'évaluer la consommation d'énergie du CPU (seulement) pour une période donnée (disons deux secondes) pendant que votre application exécute l'opération CPU la plus intensive, (de plus, la consommation d'énergie du GPU pourrait également être déduite de cette manière) tout en enregistrant des données TraceView (comme les images par seconde ou les flops par seconde) vous donnant le trafic à travers le CPU/GPU pour une milliseconde donnée. En utilisant ces données, vous pourriez calculer avec précision la consommation de puissance maximale moyenne pour votre application en exécutant le test ci-dessus quelques fois.

Voici pourquoi je dis que ce n'est que de la théorie : Il y a de nombreuses variables à considérer :

  1. Le nombre et la nature d'autres processus s'exécutant au moment du test ci-dessus (intensif en processeur)
  2. La méthode d'évaluation de la consommation d'énergie à travers le CPU/GPU (alors que des outils comme PowerTutor sont efficaces pour évaluer la consommation d'énergie, dans ce cas, l'évaluation ne serait pas aussi efficace en raison de la nécessité de collecter des données d'utilisation de puissance estampillées dans le temps. De plus, presque n'importe quelle méthode de collecte de données de puissance introduirait un surcoût supplémentaire (Le chat de Schrödinger) mais cela dépend strictement du niveau de précision que vous exigez/souhaitez.)
  3. La raison de l'information sur la consommation d'énergie - Si vous cherchez à définir la consommation d'énergie de votre application à des fins de test ou de test BÊTA/évaluation, alors c'est une tâche réalisable avec de la détermination et les outils appropriés. Si vous cherchez à obtenir des informations utilisables sur la consommation d'énergie "dans la nature", sur les appareils des utilisateurs, alors je dirais que c'est plausible mais pas réaliste. Les variables impliquées feraient même vaciller le chercheur le plus déterminé et dédié. Vous devriez tester sur chaque combinaison possible de dispositif/version Android dans la nature. De plus, les combinaisons de processus/fils d'exécution en cours et d'applications installées sont probablement incalculables.

J'espère que cela apporte un éclairage sur votre question, bien que j'ai peut-être insisté davantage que nécessaire.

-Steve

2voto

AllDayAmazing Points 309

Pour ceux qui cherchent, une ressource que nous utilisons et qui est extrêmement utile est une application gratuite d'AT&T appelée ARO.

Jetez-y un œil : ARO

Ça m'a aidé auparavant et je ne le vois pas mentionné très souvent, donc j'ai pensé le laisser ici pour ceux qui cherchent.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X