Aby wygenerować ślad metody wykonania aplikacji, możesz ją zaimplementować za pomocą klasy Debug
. Indywidualne skonfigurowanie aplikacji w ten sposób daje większą kontrolę nad tym, kiedy
urządzenie uruchomi się i przestanie rejestrować informacje śledzące. Urządzenie zapisuje też ścieżki logowania za pomocą podanych przez Ciebie nazw, dzięki czemu możesz je później łatwo zidentyfikować. Następnie możesz wyświetlić każdy dziennik śledzony za pomocą profilowania procesora w Android Studio.
Możesz też uruchamianie i zatrzymywanie śledzenia procesora w narzędziu do profilowania procesora bez instrumentacji kodu aplikacji.
Zanim zaczniesz generować logi śledzone, sprawdź, czy aplikacja ma dodaną logikę, która zapisuje logi śledzone w katalogu aplikacji.
Dostosuj aplikację
Aby utworzyć dzienniki śledzone, wywołaj funkcję startMethodTracing()
, w której chcesz, aby system zaczął rejestrować dane śledzenia.
W trakcie rozmowy możesz podać nazwę dla pliku
.trace
, a system zapisze go w określonym pakiecie
który służy do przechowywania trwałych danych aplikacji na urządzeniu docelowym.
ten sam katalog zwracany przez funkcję
getExternalFilesDir()
i znajduje się w katalogu ~/sdcard/
na większości urządzeń.
Ten plik zawiera binarne dane z wykrywania metody i tabelę mapowania z nazwami wątków i metod. Aby zatrzymać śledzenie, wywołaj
stopMethodTracing()
W tym przykładzie rozpoczynamy i zatrzymujemy nagrywanie pliku dziennikowania śledzenia o nazwie sample.trace
:
Kotlin
// Starts recording a trace log with the name you provide. For example, the // following code tells the system to start recording a .trace file to the // device with the name "sample.trace". Debug.startMethodTracing("sample") // The system begins buffering the generated trace data, until your // application calls <code><a href="/reference/android/os/Debug.html#stopMethodTracing()">stopMethodTracing()</a></code>, at which time it writes // the buffered data to the output file. Debug.stopMethodTracing()
Java
// Starts recording a trace log with the name you provide. For example, the // following code tells the system to start recording a .trace file to the // device with the name "sample.trace". Debug.startMethodTracing("sample"); ... // The system begins buffering the generated trace data, until your // application calls <code><a href="/reference/android/os/Debug.html#stopMethodTracing()">stopMethodTracing()</a></code>, at which time it writes // the buffered data to the output file. Debug.stopMethodTracing();
Pamiętaj, że jeśli aplikacja wywołuje metodę
startMethodTracing()
bez zmiany nazwy logu śledzenia, zastąpi on istniejący
zapisane na urządzeniu. Aby dowiedzieć się, jak dynamicznie zmieniać nazwę każdego logu czasu
przejdź do sekcji poświęconej zapisywaniu wielu dzienników.
Jeśli system osiągnie maksymalny rozmiar bufora przed wywołaniem funkcji stopMethodTracing()
, przestanie śledzić i wyśle powiadomienie do konsoli.
Metody uruchamiania i zatrzymywania śledzenia działają w całym procesie aplikacji. Ten
można zadzwonić,
startMethodTracing()
w zakresie aktywności
onCreate(Bundle)
i wywołaj stopMethodTracing()
w onDestroy()
tej aktywności
.
Pamiętaj, że gdy włączysz profilowanie, aplikacja działa wolniej. Oznacza to, że nie należy używać danych profilowania do określania bezwzględnych czasów wykonania (np. „wykonanie metody
foo()
zajmuje 2,5 s”). Informacje o czasie w plikach dziennika śledzonego są przydatne tylko wtedy, gdy porównujesz je z poprzednimi plikami dziennika śledzonego. Dzięki temu możesz sprawdzić, czy ostatnie zmiany przyspieszają czy spowalniają działanie aplikacji.
Podczas wdrażania na urządzeniach z Androidem 5.0 (poziom interfejsu API 21) lub nowszym możesz użyć profilowania na podstawie próbek, aby zmniejszyć wpływ na wydajność w czasie działania. Do
włączyć profilowanie próbne, wywołanie
startMethodTracingSampling()
(zamiast wywoływać startMethodTracing()
) z określonym próbkowaniem
interwału. System okresowo zbiera próbki, aż aplikacja wywoła
stopMethodTracing()
Zapisz wiele logów
Jeśli aplikacja uruchamia i zatrzymuje śledzenie metody kilka razy bez podawania nowej nazwy dla dziennika śledzenia, urządzenie zastąpi starszy dziennik nowym, czyli zachowa tylko najnowszy dziennik śledzenia. Aby zapisywać na urządzeniu wiele dzienników śledzonych, dynamicznie zmieniaj nazwę dziennika śledzonego za każdym razem, gdy aplikacja wywołuje funkcję startMethodTracing()
.
W przykładzie poniżej klasa SimpleDateFormat
służy do uwzględniania bieżącej daty i godziny w nazwie każdego dziennika śledzonego:
Kotlin
// Uses the <code><a href="/reference/java/text/SimpleDateFormat.html">SimpleDateFormat</a></code> class to create a String with // the current date and time. val dateFormat: DateFormat = SimpleDateFormat("dd_MM_yyyy_hh_mm_ss", Locale.getDefault()) val logDate: String = dateFormat.format(Date()) // Applies the date and time to the name of the trace log. Debug.startMethodTracing("sample-$logDate")
Java
// Uses the <code><a href="/reference/java/text/SimpleDateFormat.html">SimpleDateFormat</a></code> class to create a String with // the current date and time. SimpleDateFormat dateFormat = new SimpleDateFormat("dd_MM_yyyy_hh_mm_ss", Locale.getDefault()); String logDate = dateFormat.format(new Date()); // Applies the date and time to the name of the trace log. Debug.startMethodTracing( "sample-" + logDate);
Dostęp do logów śledzenia na urządzeniu
Gdy system utworzy na urządzeniu dziennik śledzenia, będziesz mieć dostęp do pliku na jeden z tych sposobów:
Użyj narzędzia Device Explorer. Aby otworzyć Eksplorator urządzeń, kliknij Widok > Okna narzędzi > Eksplorator urządzeń (lub kliknij przycisk Eksplorator urządzeń
na pasku okna narzędzi). Jak widać na ilustracji 1 znajdziesz pliki
.trace
w w katalogu pakietu.Rysunek 1. Znajdź logi śledzenia za pomocą Eksploratora urządzeń.
Skopiuj plik na komputer lokalny za pomocą polecenia
adb pull
. Poniższe polecenie kopiuje plik dziennikowaniasample.trace
z urządzenia do katalogu~/Documents/trace-logs/
na komputerze lokalnym.adb pull path-on-device/sample.trace ~/Documents/trace-logs/
Następnie możesz zaimportować plik śledzenia za pomocą narzędzia CPU Profiler.