Wie kann ich meine Android-App profilieren? [geschlossen]

93

Ich muss herausfinden, wo die Engpässe in meiner Android-App liegen.

Welche Profiling-Tools oder -Techniken kann ich verwenden?

teedyay
quelle
Ich bin nicht mit Android vertraut. Können Sie die App unter einem Debugger ausführen, den Sie unterbrechen können? In diesem Fall
Mike Dunlavey
Mmm, interessant. Ein bisschen arbeitsintensiv, aber möglicherweise nützlich, um die offensichtlicheren Leistungsprobleme zu erkennen. Vielen Dank.
teedyay
Ich verstehe, wie Sie so denken könnten: stackoverflow.com/questions/2624667/…
Mike Dunlavey
Heutzutage können Sie in Eclipse eine gute Profilerstellung durchführen. Vergessen Sie das eigenständige / manuelle Starten von TraceView usw. Ich hoffe, dass ich einen Blog-Artikel darüber mit weiteren Details schreiben kann. Pingen Sie mich an, wenn Sie weitere Details benötigen.
KarolDepka
2
Sie schlagen vor, dass es etwas Besseres als TraceView oder DDMS gibt. Was ist es?
Peri Hartman

Antworten:

37

Sie können Traceview verwenden. Es ist alles andere als ideal, funktioniert aber. Dieser Artikel beschreibt die Verwendung.

Zement
quelle
2
Wenn ich dies ausführe, heißt es, dass die Befehlszeilenversion veraltet ist und dann beendet wird. Was ist die neue Methode?
Gonzobrains
18

DDMS ist das Beste für Android. Standardmäßig ist es im ADT-Plugin enthalten.

Dieses Dokument mit detailliertem Beispiel soll Ihnen beim Umgang mit DDMS helfen.


Versuchen Sie für die Speicheranalyse Eclipse MAT

Shahul3D
quelle
4
Android-Dokumente über DDMS: developer.android.com/tools/debugging/ddms.html
Sulai
11

Es hängt davon ab, was Sie testen werden.

Wenn Sie Anwendungen für Android entwickeln, sollten Sie die TimingLogger-Klasse ausprobieren. Schauen Sie sich diesen Artikel an , der die Verwendung der TimingLogger-Hilfsklasse beschreibt.

Ein sehr gutes Tool ist JMeter und es gibt auch ein Plugin für Android .

Wenn Sie keine externen Tools verwenden möchten, sondern eine sehr standardmäßige Methode zum Messen der verstrichenen Zeit, müssen Sie System.nanoTime () verwenden. Sie sollten currentTimeMillis nicht verwenden, da es die Wanduhrzeit misst und da keine Computeruhr perfekt ist (alle müssen gelegentlich korrigiert werden). Es gibt einen Prozess, der ausgeführt wird und kontinuierlich kleine Korrekturen an der Systemuhr vornimmt. Ganz zu schweigen von der Schaltsekundenkorrektur.

Obwohl currentTimeMillis häufig verwendet wird, ist es immer noch falsch, die verstrichene Zeit und das abgelaufene Timing zu messen. Da der Aufruf einige Zeit in Anspruch nimmt, sollten Sie jedoch nicht damit rechnen, sehr, sehr kleine Intervalle korrekt zu messen. Aber das sollte kein Problem sein, wenn man mit Android arbeitet.

Ich zeige Ihnen ein Beispiel:

long startTime = System.nanoTime();

// run/call the method

long endTime = System.nanoTime();
long diff = endTime - startTime ;
System.out.println("Elapsed milliseconds: " + diff /1000000);

Sie können sich auch diese kostenlose Bibliothek ansehen: http://jetm.void.fm/ .

Dort finden Sie auch ein Tutorial für JMeter .

David
quelle