Dostosuj aplikację do swoich potrzeb i generuj dzienniki śledzenia

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 dziennikowania sample.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.