Dostosuj aplikację do swoich potrzeb i generuj dzienniki śledzenia

Aby wygenerować ślad metody wykonywania aplikacji, możesz ją zmodyfikować za pomocą klasy Debug. Skonfigurowanie aplikacji w ten sposób da Ci większą kontrolę nad tym, kiedy urządzenie uruchamia i przestaje rejestrować informacje ze śledzenia. Urządzenie zapisuje też logi śledzenia z użyciem podanych przez Ciebie nazw, dzięki czemu możesz później łatwo znaleźć każdy dziennik. Następnie możesz wyświetlić każdy dziennik śledzenia za pomocą programu profilującego procesora w Android Studio.

Możesz też uruchomić i zatrzymać śledzenie w programie profilującym CPU bez instrumentowania kodu aplikacji.

Zanim zaczniesz generować logi logów czasu, sprawdź, czy masz dodane do aplikacji funkcje, które pozwalają zapisywać logi śledzenia w katalogu konkretnej aplikacji.

Dostosuj swoją aplikację

Aby utworzyć logi śledzenia, wywołaj startMethodTracing() tam, gdzie system ma zacząć rejestrować dane śledzenia.

W wywołaniu możesz podać nazwę pliku .trace, a system zapisze go w katalogu dotyczącym pakietu przeznaczonym na trwałe dane aplikacji na urządzeniu docelowym. Jest to ten sam katalog zwracany przez usługę getExternalFilesDir(), który znajduje się w katalogu ~/sdcard/ na większości urządzeń. Ten plik zawiera dane śledzenia metody binarnej oraz tabelę mapowania z nazwami wątków i metod. Aby zatrzymać śledzenie, wywołaj funkcję stopMethodTracing().

Poniższy przykład rozpoczyna i przestaje rejestrować log ś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 ponownie wywoła polecenie startMethodTracing() bez zmiany nazwy logu śledzenia, zastąpi on istniejący dziennik zapisany na urządzeniu. Aby dowiedzieć się, jak dynamicznie zmieniać nazwę każdego logu logów czasu, przejdź do sekcji o zapisywaniu wielu logów.

Jeśli system osiągnie maksymalny rozmiar bufora, zanim wywołasz funkcję stopMethodTracing(), zatrzyma śledzenie i wyśle powiadomienie do konsoli. Metody, które uruchamiają i zatrzymują ślady, działają w ramach całego procesu aplikacji. Oznacza to, że możesz wywołać startMethodTracing() w metodzie onCreate(Bundle) aktywności i wywołać stopMethodTracing() w metodzie onDestroy() tej aktywności.

Pamiętaj, że przy włączonym profilowaniu aplikacja działa wolniej. Oznacza to, że nie należy używać danych profilowania do określania bezwzględnych czasów trwania (np. „uruchomienie metody foo() zajmuje 2,5 sekundy”). Informacje o czasie podane w logach śledzenia są przydatne tylko wtedy, gdy porównujesz je z poprzednimi logami logów czasu. Dzięki temu możesz sprawdzić, czy ostatnie zmiany spowalniają czy przyspieszają działanie aplikacji.

W przypadku wdrażania na urządzeniach z Androidem 5.0 (poziom interfejsu API 21) lub nowszym możesz użyć profilowania opartego na próbkach, aby profilować z mniejszym wpływem na wydajność środowiska wykonawczego. Aby włączyć profilowanie próbkowane, wywołaj funkcję startMethodTracingSampling() (zamiast wywoływać metodę startMethodTracing()) z określonym interwałem próbkowania. System okresowo zbiera próbki, dopóki aplikacja nie wywoła funkcji stopMethodTracing().

Zapisz wiele logów

Jeśli aplikacja wielokrotnie uruchamia i zatrzymuje śledzenie metody bez podawania nowej nazwy logu logu czasu, urządzenie zastępuje starszy log logu nowym – to znaczy, że zachowuje tylko najnowszy dziennik logu czasu. Aby zapisać wiele logów śledzenia na urządzeniu, dynamicznie zmień nazwę logu logu za każdym razem, gdy aplikacja wywołuje funkcję startMethodTracing(). W przykładzie poniżej użyto klasy SimpleDateFormat do uwzględnienia bieżącej daty i godziny podczas nazywania każdego logu śledzenia:

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, możesz uzyskać do niego dostęp na jeden z tych sposobów:

  • Korzystanie z Eksploratora urządzeń. Aby otworzyć Eksploratora urządzeń, kliknij Widok > Okna narzędzi > Eksplorator urządzenia (lub kliknij przycisk Eksplorator urządzeń na pasku narzędzi). Jak pokazano na rysunku 1, pliki .trace możesz znaleźć, przechodząc do katalogu zawierającego pakiet aplikacji.

    Rysunek 1. Zlokalizuj logi śledzenia za pomocą Eksploratora urządzeń.

  • Skopiuj plik na komputer lokalny za pomocą polecenia adb pull. Poniższe polecenie powoduje skopiowanie logu śledzenia o nazwie sample.trace z urządzenia do katalogu ~/Documents/trace-logs/ komputera lokalnego.

    adb pull path-on-device/sample.trace ~/Documents/trace-logs/

Następnie możesz zaimportować plik śledzenia za pomocą programu profilującego procesora.