web-dev-qa-db-fra.com

Ma batterie de vidange pour application Android est-elle?

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 lancé le jeu pour la première fois, je faisais toutes sortes de choses idiotes, telles que dessiner à nouveau 9 patchs sur chaque image et de même avec du texte. Depuis, j'ai optimisé une grande partie de ces opérations en dessinant des objets Bitmap et en les dessinant chaque image, en ne les redessinant que lorsque cela est nécessaire. 

J'ai déjà reçu des plaintes concernant l'épuisement de la batterie, et après mes modifications, j'aimerais savoir (scientifiquement) si j'ai apporté des améliorations. Malheureusement, je ne dispose d'aucune donnée préalable, il serait donc très utile de comparer les performances à un autre jeu.

J'exécute Traceview et j'en utilise les résultats principalement pour identifier les méthodes consommant beaucoup de temps processeur. 

Alors - Quel est le meilleur moyen de déterminer les performances de la batterie de mon application et quel est le bon point de référence?

Je sais que je peux examiner les% s des différentes applications via les paramètres, mais cela n’est pas scientifique non plus, car le chiffre que j’en tire dépend également de ce qui se passe dans toutes les autres applications. J'ai parcouru (la plupart des) la documentation de Google et, même si le message est clair que vous devriez économiser de la batterie (et que cela donne une astuce occasionnelle quant à la façon de le faire), il y a peu d'indication sur la façon dont je peux mesurer bien mon application est performante. La dernière chose que je veux, ce sont davantage de plaintes concernant l'épuisement de la batterie sur l'Android Market!

Merci d'avance.


MODIFIER

Merci pour tous vos conseils utiles/suggestions. Ce que je veux vraiment savoir, c’est comment utiliser les données provenant de Traceview (c’est-à-dire: temps CPU en ms consacré à chaque image 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.

73
Tom R

Voici ma suggestion:

Je surveille la consommation d'énergie tout en développant mes applications (qui interrogent parfois les capteurs à une vitesse <25 ns) à l'aide de PowerTutor . Regardez, ça ressemble à ceci peut-être ce que vous recherchez, l'application vous indique ce que vous utilisez dans mW, J ou par rapport au reste du système. De plus, les résultats sont ventilés par CPU, WiFi, Affichage, (autres radios installées). Le seul problème est qu'il est écrit pour un modèle de téléphone spécifique, mais je l'utilise avec beaucoup de succès sur mon EVO 4G, mon Galaxy S (Sprint Epic) et mon héros. 

Bonne chance, - Steve

41
Kingsolmn

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 game. Jeux draine la batterie rapidement.
  • Vous itérez avec l'aide d'un Thread. Avez-vous limité le FPS pour que le processeur ignore les itérations inutiles? Puisque vous travaillez en 2D, je suppose que vous utilisez la SurfaceView. 60 FPS suffiront pour un jeu en temps réel.
  • Vous ne arrêtez pas la 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 iterate qui exécute wait(); durant onPause?

Les personnes qui commentent que la batterie de leur jeu a coulé ont probablement pour objectif que votre application ne soit pas utilisée. Sinon, ce serait étrange, car chaque jeu sur Android Market draine la batterie - plus ou moins.

20
Wroclai

Si vous essayez de mesurer "l'amélioration par rapport à votre version précédente", je ne pense pas qu'il soit logique de comparer à un autre jeu! À moins que ces deux jeux ne fassent exactement le nécessaire, c'est aussi peu scientifique que possible.

Au lieu de cela, je récupèrerais la version précédente de votre application à partir du contrôle de code source, la lancerais, la mesurerais, puis le lancer avec le dernier code et le comparer à nouveau.

Pour comparer, vous pouvez par exemple utiliser l'outil de ligne de commande "top" (définitivement disponible dans busybox si votre téléphone est enraciné, ne savez pas s'il est fourni avec un téléphone standard. Probablement pas). Cela vous montre l'utilisation du processeur de votre processus en pourcentage.

6
EboMike

Il existe un profileur de batterie développé par Qualcomm appelé Trepn Profiler: https://developer.qualcomm.com/mobile-development/increase-app-performance/trepn-profiler

4
Murat

comment puis-je utiliser les données provenant de Traceview (c'est-à-dire: temps processeur en ms passé sur chaque image du jeu) pour déterminer l'utilisation de la batterie (si cela est possible)

En théorie, il serait possible d'extrapoler l'utilisation de la batterie pour votre application en examinant la consommation d'énergie image par image. Le meilleur moyen d'y parvenir serait d'évaluer la consommation d'énergie du processeur (uniquement) pendant une période donnée (par exemple, deux secondes) pendant que votre application exécute l'opération la plus intensive en ressources processeur (en outre, l'utilisation de l'alimentation du GPU pourrait être obtenue de cette façon). également) tout en enregistrant des données TraceView (telles que des images par seconde ou des flops par seconde) vous donnant le trafic sur le processeur/GPU pour une milliseconde donnée. En utilisant ces données, vous pouvez calculer avec précision la consommation moyenne d’énergie de pointe de votre application en exécutant le test ci-dessus plusieurs fois.

Voici pourquoi je dis que ce n'est que de la théorie: Il y a plusieurs variables à prendre en compte:

  1. Le nombre et la nature des autres processus en cours d'exécution au moment du test ci-dessus (processeur intensif)
  2. Méthode d'évaluation de la consommation d'énergie sur le processeur/le processeur graphique (bien que des outils tels que PowerTutor soient 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 l'alimentation datées et horodatées. toute méthode de collecte de données de puissance introduirait un temps système supplémentaire ( le chat de Schrödinger ), mais cela dépend strictement du niveau de précision requis/souhaité.)
  3. La raison de l'information sur la consommation d'énergie - Si vous souhaitez définir la consommation d'énergie de votre application à des fins de test ou d'évaluation BETA, il s'agit d'une tâche réalisable avec une certaine détermination et les outils appropriés. Si vous cherchez à obtenir des informations utilisables sur la consommation d'énergie "à l'état sauvage", sur les appareils de l'utilisateur, alors je dirais que c'est plausible mais pas réaliste. Les vairables impliqués rendraient même le chercheur le plus déterminé et le plus dévoué possible. Vous devez tester toutes les combinaisons possibles de version appareil/Android à l'état sauvage. De plus, les combinaisons de processus/threads en cours d'exécution et d'applications installées sont probablement incalculables. 

J'espère que cela donne un aperçu de votre question, même si j'y suis peut-être allé plus loin que nécessaire.

-Steve

2
Kingsolmn

Pour ceux qui cherchent, l'une des ressources extrêmement utiles que nous utilisons est une application gratuite d'AT & T appelée ARO.

Donnez-lui un coup d'oeil: ARO

Cela m’avait déjà aidé et je ne le vois pas mentionné très souvent, alors j’ai pensé le laisser tomber ici pour ceux qui le cherchaient.

2
AllDayAmazing

Je sais que cette question est ancienne et qu'il est tard, mais si vous venez ici à la recherche d'une solution, je vous suggère de jeter un coup d'œil au test JouleUnit: http://dnlkntt.wordpress.com/2013/09/ 28/Comment-tester-la-consommation-énergétique-sur-les-appareils-Android /

Il s'intègre à Eclipse et vous fournit une grande quantité de détails sur la quantité de batterie utilisée par votre application.

0
brunorey

Je connais trois options qui peuvent vous aider pour une mesure scientifique:

  1. Utilisez un matériel spécialement conçu pour cela. MONITEUR DE PUISSANCE HAUTE TENSION Monsoon . https://msoon.github.io/powermonitor/PowerTool/doc/Power%20Monitor%20Manual.pdf
  2. Téléchargez et installez Trepn Profiler (un outil de Qualcomm) sur votre téléphone. Vous n'aurez pas besoin d'un ordinateur pour les rapports. Les rapports sont en direct et en temps réel sur le téléphone. Vous pouvez télécharger Trepn Profiler à partir du lien suivant: https://play.google.com/store/apps/details?id=com.quicinc.trepn&hl=en_US

Veuillez noter que pour les téléphones récents (avec Android 6+), cela fonctionne en mode estimation. Si vous avez besoin de chiffres précis, vous devez avoir une liste de périphériques sélectionnés. Consultez le lien suivant pour obtenir la liste: https://developer.qualcomm.com/software/trepn-power-profiler/faq } _ Vous pouvez profiler les applications séparément et l'ensemble du système.

  1. Utilisez Batterystats et Battery Historian de Google. https://developer.Android.com/studio/profile/battery-historian } _
0
Paiman Roointan

"Je sais que je peux examiner les% s de différentes applications à travers les paramètres, Mais ceci n’est pas scientifique non plus, car le chiffre Que je tire de cela dépend également de Ce qui se passe dans tous les autres applications. "

La première chose que je ferais est de rechercher une application utilisant déjà une batterie de manière constante et connue. Vous pourrez ensuite vous en servir comme référence pour déterminer l'utilisation de votre application.

S'il n'y a pas une telle application, vous devrez espérer obtenir une réponse de quelqu'un d'autre ... et si vous réussissez à créer une telle application, je suggérerais de vendre votre nouvelle application "référence d'utilisation de la batterie" afin que d'autres programmeurs puissent l'utiliser . :)

0
TimFoolery