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ć?


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ć.


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


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 .


Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.