Entleert meine Android App den Akku?

74

Ich entwickle ein Spiel für Android. Es verwendet eine Oberflächenansicht und die Art der bereitgestellten Standard-2D-Zeichnungs-APIs. Als ich das Spiel zum ersten Mal veröffentlichte, machte ich alle möglichen dummen Dinge, wie das Neuzeichnen von 9 Patches auf jedem Frame und ebenfalls mit Text. Seitdem habe ich vieles davon optimiert, indem ich auf Bitmap-Objekte gezeichnet und sie in jedem Frame gezeichnet habe, wobei ich nur bei Bedarf erneut auf die Bitmap-Objekte gezeichnet habe.

Ich habe bereits Beschwerden über Batterieentladung erhalten und möchte nach meinen Änderungen (wissenschaftlich) wissen, ob ich Verbesserungen vorgenommen habe. Leider habe ich keine vorherigen Daten, daher wäre es am nützlichsten, die Leistung mit einem anderen Spiel zu vergleichen.

Ich habe Traceview ausgeführt und die Ergebnisse hauptsächlich verwendet, um CPU-zeitaufwändige Methoden zu identifizieren.

Also - wie lässt sich die Akkuleistung meiner App am besten bestimmen und was ist ein guter Benchmark?

Ich weiß, dass ich die% s verschiedener Apps über die Einstellungen anzeigen kann, aber dies ist wiederum unwissenschaftlich, da die Zahl, die ich daraus erhalte, auch davon abhängt, was in allen anderen Apps passiert. Ich habe (den größten Teil) der Google-Dokumentation durchgesehen, und obwohl klar ist, dass Sie Batterie sparen sollten (und gelegentlich Tipps dazu geben, wie), gibt es kaum Hinweise darauf, wie ich messen kann, wie gut meine App ist durchführen. Das Letzte, was ich möchte, sind weitere Beschwerden über Batterieverbrauch im Android Market!

Danke im Voraus.


BEARBEITEN

Vielen Dank für all Ihre hilfreichen Ratschläge / Vorschläge. Was ich wirklich wissen möchte, ist, wie ich die aus Traceview stammenden Daten (dh die CPU-Zeit in ms, die für jeden Frame des Spiels aufgewendet wurde) verwenden kann, um den Batterieverbrauch zu bestimmen (falls dies überhaupt möglich ist). Wenn ich auf meine ursprüngliche Frage zurückblicke, kann ich sehen, dass ich etwas vage war. Danke noch einmal.

An Herrn
quelle
1
Leider befürchte ich, dass CPU-Metriken nicht ausreichen. Wenn Sie beispielsweise alle 5 Sekunden ein kleines Datenpaket über das Netzwerk senden, wird mehr verbraucht, als wenn Sie viele Pakete gleichzeitig senden und dann eine Minute lang leise sind. Gleiches gilt wahrscheinlich für Sensoren und GPS
Heiko Rupp

Antworten:

41

Hier ist mein Vorschlag:

Ich beobachte den Stromverbrauch, während ich meine Apps (die manchmal die Sensoren mit Raten von <25 ns abfragen) mit PowerTutor entwickle . Probieren Sie es aus, es klingt so, als ob Sie vielleicht suchen, die App sagt Ihnen, was Sie in mW, J oder relativ zum Rest des Systems verwenden. Die Ergebnisse sind auch nach CPU, WLAN, Display (andere installierte Funkgeräte) aufgeschlüsselt. Der einzige Haken ist, dass es für ein bestimmtes Telefonmodell geschrieben wurde, aber ich verwende es mit großem Erfolg auf meinem EVO 4G, Galaxy S (Sprint Epic) und Hero.

Viel Glück, -Steve

Kingsolmn
quelle
Vielen Dank, dass Sie der einzige sind, der meine Frage direkt beantwortet! Ich werde versuchen, was Sie vorschlagen, und dann Ihre Antwort akzeptieren.
Tom R
Np, ich hatte Angst, dass ich weit vom Ziel entfernt sein würde, basierend darauf, wie alle anderen antworteten. Aber die anderen Antworten helfen uns beiden, denke ich, viele gute Tipps, um zu verhindern, dass die App ein Power-Hog wird, was dazu führt, dass eine App vom Benutzer deinstalliert wird!
Kingsolmn
PowerTutor ist eine großartige App, die mir sehr geholfen hat, aber die GPS-Nutzung nicht in den Anwendungsdetails enthält. Dr. Power ist eine großartige ergänzende App, um dies zu tun. Es werden keine Grafiken angezeigt, aber es werden weitere Module in die App-Details aufgenommen.
LG
20

Es besteht die Möglichkeit, dass Ihr Spiel die Batterie entlädt. Ich glaube, dies hängt von mehreren Gründen ab, die wie folgt lauten:

  • Ihre Anwendung ist ein Spiel . Spiele entladen den Akku schnell.
  • Sie iterieren mit Hilfe von a Thread. Haben Sie die FPS so begrenzt, dass die CPU unnötige Iterationen überspringt? Da Sie mit 2D arbeiten, gehe ich davon aus, dass Sie das verwenden SurfaceView. 60 FPS reichen für ein Echtzeitspiel.
  • Sie stoppen das nicht ,Thread wenn Ihre Anwendung beendet wird. Daher wiederholen Sie den Code, wenn Ihre Anwendung nicht aktiv ist.
  • Haben Sie eine iterative Sperre , die wait();während funktioniert onPause?

Die Leute, die kommentieren, dass in Ihrem Spiel die Batterie leer ist, zielen wahrscheinlich darauf ab, wenn Ihre Anwendung nicht verwendet wird. Andernfalls wäre es seltsam, weil jedes Spiel auf Android Market mehr oder weniger Batterie verbraucht .

Wroclai
quelle
Tatsächlich ist das Problem, das Sie ansprechen, eines, das ich (dachte) vor einiger Zeit durch genau die Methode in Ihrem letzten Aufzählungspunkt behoben hatte: Die CPU-Auslastung während der Spielpause ging durch das Dach, aber das Hinzufügen von wait () in der Die Pause-Schleife hat das Problem behoben. Ich habe kürzlich alle meine Apps mit Watchdog überwacht und meine App wurde nicht einmal über dem Schwellenwert erkannt.
Tom R
Ich kann nur schwer erkennen, dass der Akku leer ist, wenn die oben genannten Punkte behoben wurden. Diese Punkte sind der realistischste Weg, um den Stromverbrauch zu lösen. Sehen Sie es so - wie kann Ihr Spiel möglicherweise Batterie essen, wenn die oben genannten Punkte überprüft werden?
Wroclai
6

Wenn Sie versuchen, die "Verbesserung gegenüber Ihrer vorherigen Version" einzuschätzen, halte ich es nicht für sinnvoll, mit einem anderen Spiel zu vergleichen! Wenn diese beiden Spiele nicht genau das tun, ist dies so unwissenschaftlich wie es nur geht.

Stattdessen würde ich die vorherige Version Ihrer App aus der Quellcodeverwaltung holen, sie ausführen, messen und dann mit dem neuesten Code ausführen und sie erneut vergleichen.

Zum Vergleich können Sie beispielsweise das Befehlszeilentool "top" verwenden (definitiv in der Busybox verfügbar, wenn Ihr Telefon gerootet ist, nicht sicher, ob es mit einem Standardtelefon geliefert wird. Wahrscheinlich nicht). Das zeigt Ihnen die CPU-Auslastung Ihres Prozesses in Prozent.

EboMike
quelle
1
Es ist eine gute Idee und einen Versuch wert, aber ich glaube nicht, dass es meinen Benutzern wichtig ist, ob sich die Leistung meiner App verbessert hat oder nicht. Ich denke, sie möchten einfach keinen massiven Batterieverbrauch sehen, den sie mit meiner App in Verbindung bringen können . Ich weiß, dass dies ein kleiner Widerspruch zu dem ist, als ich "wissenschaftlich" sagte, aber was ich wirklich wissen möchte, ist nicht "was ist besser Batterieverbrauch", sondern "was angemessen ist". Und dann nimm es von dort ...
Tom R
2
"Angemessen" ist alles relativ. Niemand kann Ihnen darauf eine Antwort geben.
Hackbod
Ein gutes Spiel mit auffälligen Grafiken wird die CPU erheblich nutzen. Aber dafür ist die gesamte CPU-Leistung gedacht. Wenn Sie wirklich besorgt sind, können Sie einen "Licht" -Modus hinzufügen, der die Grafik statischer macht, aber einen Bruchteil der CPU-Kosten verursacht.
EboMike
2

Wie kann ich die aus Traceview stammenden Daten (dh CPU-Zeit in ms, die für jeden Frame des Spiels aufgewendet wurden) verwenden, um den Batterieverbrauch zu bestimmen (falls dies überhaupt möglich ist)?

Theoretisch wäre es möglich, den Akkuverbrauch für Ihre App zu extrapolieren, indem Sie den Stromverbrauch Frame für Frame betrachten. Der beste Weg, dies zu erreichen, besteht darin, den Stromverbrauch der CPU (nur) für einen bestimmten Zeitraum (z. B. zwei Sekunden) zu bewerten, während Ihre App den CPU-intensivsten Betrieb ausführt (außerdem kann der GPU-Stromverbrauch auf diese Weise ermittelt werden Außerdem) während der Aufzeichnung von TraceView-Daten (z. B. Frames pro Sekunde oder Flops pro Sekunde) erhalten Sie den Datenverkehr über die CPU / GPU für eine bestimmte Millisekunde. Mit diesen Daten können Sie den durchschnittlichen Spitzenstromverbrauch Ihrer App genau berechnen, indem Sie den obigen Test einige Male ausführen.

Deshalb sage ich, dass es nur Theorie ist: Es gibt viele Variablen, die berücksichtigt werden müssen:

  1. Die Anzahl und Art anderer Prozesse, die zum Zeitpunkt des obigen Tests ausgeführt wurden (prozessorintensiv)
  2. Methode zur Bewertung des Stromverbrauchs über die CPU / GPU (während Tools wie PowerTutor zur Bewertung des Stromverbrauchs effektiv sind, wäre die Bewertung in diesem Fall nicht so effektiv, da zeitgestempelte Stromverbrauchsdaten erfasst werden müssen Jede Methode zur Erfassung von Leistungsdaten würde einen zusätzlichen Overhead verursachen ( Schrödingers Katze ), der jedoch streng von der Genauigkeit abhängt, die Sie benötigen / wünschen.)
  3. Der Grund für die Informationen zum Stromverbrauch - Wenn Sie den Stromverbrauch Ihrer App zu Test- oder BETA-Test- / Bewertungszwecken definieren möchten, ist dies eine machbare Aufgabe mit einiger Entschlossenheit und den richtigen Tools. Wenn Sie nützliche Informationen über den Stromverbrauch "in freier Wildbahn" auf den Geräten des Benutzers erhalten möchten, würde ich sagen, dass dies plausibel, aber nicht realistisch ist. Die beteiligten Vairables würden selbst den entschlossensten und engagiertesten Forscher in Ohnmacht fallen lassen. Sie müssten auf jeder möglichen Kombination von Gerät / Android-Version in freier Wildbahn testen. Darüber hinaus ist die Kombination von laufenden Prozessen / Threads und installierten Apps wahrscheinlich nicht kalkulierbar.

Ich hoffe, dies gibt einen Einblick in Ihre Frage, obwohl ich möglicherweise tiefer als nötig darauf eingegangen bin.

-Steve

Kingsolmn
quelle
2

Eine Ressource, die wir verwendet haben und die äußerst hilfreich ist, ist eine kostenlose App von AT & T namens ARO.

Schau es dir an: ARO

Es hat mir schon früher geholfen und ich sehe es nicht sehr oft erwähnt, also dachte ich, ich würde es hier für jeden ablegen, der es sucht.

AllDayAmazing
quelle
0

"Ich weiß, dass ich die% s verschiedener Apps über die Einstellungen anzeigen kann, aber dies ist wiederum unwissenschaftlich, da die Zahl, die ich daraus erhalte, auch davon abhängt, was in allen anderen Apps passiert."

Das erste, was ich tun würde, ist nach einer App zu suchen, die bereits eine bekannte, konsistente Akkunutzung aufweist. Anschließend können Sie diese als Referenz verwenden, um die Nutzung Ihrer App zu bestimmen.

Wenn es keine solche App gibt, müssen Sie auf eine Antwort von jemand anderem hoffen ... und wenn Sie eine solche App erfolgreich erstellen, würde ich empfehlen, Ihre neue App "Batterieverbrauchsreferenz" zu verkaufen, damit andere Programmierer sie verwenden können . :) :)

TimFoolery
quelle
1
Das Problem ist, dass dies immer noch unzuverlässig ist, da alles in% s angegeben ist. Als Beispiel: Wenn ich mein Nexus vom Ladegerät trenne und einige Minuten mit dem Spielen der App beginne, wenn ich den Akkuverbrauch nachschaue, sind es mehr als 50%. Dies bedeutet jedoch (hoffentlich) nicht, dass der Batterieverbrauch extrem hoch ist. (Entschuldigung, das war nicht sehr gut formuliert)
Tom R
Richtig, aber wenn es eine App gibt, die konstant eine bestimmte Menge an mA verbraucht, können Sie herausfinden, wie viel Ihre App im Verhältnis dazu verbraucht hat ... z. B. liegt die Referenz-App bei 10%, und Sie sind es Bei 5% verbrauchen Sie die Hälfte dieser statischen Menge an mA. Wenn Sie bei 50%, aber bei 10% sind, verwenden Sie 5x so viele mA. Wie ich schon sagte, es ist möglich, dass es keine solche App gibt, aber es würde sich wahrscheinlich lohnen, sie zu machen, wenn Sie sich sowieso die Mühe machen.
TimFoolery
3
Die genaueste Methode zur Messung des Batterieverbrauchs (außer bei Hardware zur Messung des tatsächlichen Stromverbrauchs) besteht wahrscheinlich darin, das Gerät vollständig aufzuladen und dann zu prüfen, wie lange Ihre Anwendung ausgeführt werden kann, bis der Akku entladen ist. Alles andere ist eine Annäherung an unterschiedliche Genauigkeit. Beispiel: Der Batterieverbrauch berücksichtigt derzeit nicht den OpenGL-Stromverbrauch.
Hackbod
Ja, das wollte ich auch vorschlagen. Sehen Sie, wie lange es dauert, während Sie nichts tun. Wenn es beispielsweise 48 Stunden dauert, verbraucht es im Leerlauf 2%. Wenn Sie den mAh-Wert der Batterie kennen, kann dieser auch in mAh eingegeben werden, nicht nur in Prozent. Dann sehen Sie, wie lange es dauert, bis Ihr Spiel gespielt wird. Acht Stunden (holen Sie sich Hilfe von einem oder zwei Kindern) bedeuten 12,5% Batterieverbrauch pro Stunde, außer Sie möchten möglicherweise diese Grundlast von 2% entfernen.
TimFoolery
0

Ich kenne drei Optionen, die Ihnen bei einer wissenschaftlichen Maßnahme helfen können:

  1. Verwenden Sie eine speziell dafür entwickelte Hardware. Monsun HOCHSPANNUNGSLEISTUNGSÜBERWACHUNG. https://msoon.github.io/powermonitor/PowerTool/doc/Power%20Monitor%20Manual.pdf
  2. Laden Sie Trepn Profiler (ein Tool von Qualcomm) herunter und installieren Sie es auf Ihrem Telefon. Sie benötigen keinen Computer für die Berichterstellung. Berichte sind live und in Echtzeit am Telefon. Sie können Trepn Profiler über den folgenden Link herunterladen: https://play.google.com/store/apps/details?id=com.quicinc.trepn&hl=de_DE

Bitte beachten Sie, dass das aktuelle Telefon (mit Android 6+) im Schätzmodus funktioniert. Wenn Sie genaue Zahlen benötigen, benötigen Sie eine Liste ausgewählter Geräte. Überprüfen Sie den folgenden Link für die Liste: https://developer.qualcomm.com/software/trepn-power-profiler/faq Sie können Apps und das gesamte System separat profilieren.

  1. Verwenden Sie Batterystats und Battery Historian von Google. https://developer.android.com/studio/profile/battery-historian
Paiman Roointan
quelle