Jak mogę sprofilować moją aplikację na Androida? [Zamknięte]

93

Muszę dowiedzieć się, gdzie są wąskie gardła w mojej aplikacji na Androida.

Z jakich narzędzi lub technik profilowania mogę skorzystać?

teedyay
źródło
Nie znam Androida. Czy możesz uruchomić aplikację w debugerze, który możesz przerwać? Jeśli tak, ta metoda działa: stackoverflow.com/questions/375913/…
Mike Dunlavey
Mmm, ciekawe. Trochę pracochłonne, ale potencjalnie przydatne do wykrywania bardziej rażących problemów z wydajnością. Dzięki.
teedyay
Rozumiem, jak możesz tak pomyśleć: stackoverflow.com/questions/2624667/ ...
Mike Dunlavey
W dzisiejszych czasach możesz zrobić ładne profilowanie wewnątrz Eclipse. Zapomnij o samodzielnym / ręcznym uruchamianiu TraceView, itp. Mam nadzieję, że napiszę o tym artykuł na blogu, zawierający więcej szczegółów. Zapytaj mnie, jeśli potrzebujesz więcej informacji.
KarolDepka
2
Sugerujesz, że jest coś lepszego niż TraceView lub DDMS. Co to jest?
Peri Hartman

Odpowiedzi:

37

Możesz użyć Traceview. Daleko mu do ideału, ale działa. W tym artykule opisano, jak z niego korzystać.

cement
źródło
2
Kiedy to uruchamiam, wyświetla komunikat, że wersja wiersza polecenia jest przestarzała, a następnie kończy działanie. Jaka jest nowa metoda?
gonzobrains
18

DDMS jest najlepszy dla Androida. Domyślnie jest dołączany do wtyczki ADT.

Ten dokument ze szczegółowym przykładem powinien pomóc w radzeniu sobie z DDMS.


Do analizy pamięci wypróbuj Eclipse MAT

Shahul3D
źródło
4
Dokumentacja Androida na temat DDMS: developer.android.com/tools/debugging/ddms.html
sulai
11

To zależy, co zamierzasz przetestować.

Jeśli tworzysz aplikacje na Androida, powinieneś wypróbować klasę TimingLogger. Zapoznaj się z tym artykułem opisującym użycie klasy pomocniczej TimingLogger.

Bardzo dobrym narzędziem jest JMeter i jest też wtyczka dla Androida .

jeśli nie chcesz używać zewnętrznych narzędzi, ale bardzo standardowy sposób, aby mierzyć upływający czas, musisz użyć System.nanoTime (). Nie powinieneś używać currentTimeMillis, ponieważ mierzy czas zegara ściennego, a ponieważ żaden zegar komputera nie jest doskonały (wszystkie czasami wymagają korekty), istnieje proces, który działa i nieustannie wprowadza niewielkie poprawki do zegara systemowego. Nie wspominając o korekcie sekundy przestępnej.

Chociaż currentTimeMillis jest często używany, pomiar upływającego czasu i synchronizacji jest nadal nieprawidłowy. W każdym razie, ponieważ wywołanie zajmuje trochę czasu, nie należy oczekiwać prawidłowego mierzenia bardzo małych odstępów czasu. Ale to nie powinno stanowić problemu przy pracy z Androidem.

Pokażę Ci przykład:

long startTime = System.nanoTime();

// run/call the method

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

Możesz również zajrzeć do tej bezpłatnej biblioteki: http://jetm.void.fm/ .

Możesz również znaleźć samouczek dotyczący JMeter .

David
źródło