Чтобы создать трассировку метода для выполнения приложения, вы можете использовать класс Debug. Такой способ позволяет точнее контролировать, когда устройство начинает и прекращает записывать информацию трассировки. Устройство также сохраняет журналы трассировки под указанными вами названиями, чтобы вы могли легко идентифицировать каждый журнал позже. Затем вы можете просмотреть каждый журнал трассировки с помощью Профилировщика ЦП Android Studio.
Вы также можете запускать и останавливать трассировку в Профилировщике ЦП, не добавляя в код приложения инструменты для отладки.
Прежде чем создавать журналы трассировки, убедитесь, что в приложение добавлена логика для сохранения журналов трассировки в каталог приложения.
Как настроить приложение
Чтобы создать журнал трассировки, вызовите startMethodTracing() в том месте, где система должна начать запись данных трассировки.
В вызове можно указать название файла .trace, и система сохранит его в каталоге пакета, предназначенном для постоянных данных приложения на целевом устройстве. Этот же каталог возвращается методом getExternalFilesDir() и на большинстве устройств находится в каталоге ~/sdcard/.
Этот файл содержит двоичные данные трассировки метода и таблицу сопоставления с названиями потоков и методов. Чтобы остановить трассировку, вызовите stopMethodTracing().
В следующем примере запускается и останавливается запись журнала трассировки с названием 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();
Обратите внимание, что если приложение снова вызовет startMethodTracing(), не изменив название журнала трассировки, то существующий журнал, сохраненный на устройстве, будет перезаписан. Чтобы узнать, как динамически менять название каждого журнала трассировки, перейдите в раздел Сохранение нескольких журналов.
Если система достигнет максимального размера буфера до того, как вы вызовете stopMethodTracing(), она остановит трассировку и отправит уведомление в консоль.
Методы, которые запускают и останавливают трассировку, работают во всем процессе приложения. Например, вы можете вызвать startMethodTracing() в методе onCreate(Bundle) своего объекта activity, а stopMethodTracing() – в методе onDestroy() этого объекта.
Обратите внимание, что при включенном профилировании приложение работает медленнее. Это означает, что не следует использовать данные профилирования для определения абсолютных временных показателей (например, "выполнение метода foo() занимает 2,5 секунды"). Информация о времени в журналах трассировки полезна только при сравнении с предыдущими журналами трассировки, чтобы вы могли увидеть, ускоряют или замедляют работу вашего приложения недавние изменения.
При развертывании на устройствах с Android 5.0 (уровень API 21) и более поздними версиями вы можете использовать профилирование на основе выборки, чтобы снизить влияние на производительность во время выполнения. Чтобы включить профилирование выборки, вызовите startMethodTracingSampling() (вместо startMethodTracing()) с указанным интервалом выборки. Система периодически собирает образцы, пока приложение не вызовет stopMethodTracing().
Как сохранить несколько журналов
Если приложение запускает и останавливает трассировку метода несколько раз, не указывая новое имя для журнала трассировки, устройство перезаписывает старый журнал трассировки новым, то есть сохраняет только самый последний журнал трассировки. Чтобы сохранить на устройстве несколько журналов трассировки, динамически переименовывайте журнал каждый раз, когда приложение вызывает startMethodTracing().
В примере ниже используется класс SimpleDateFormat, чтобы в название каждого журнала трассировки включались текущие дата и время:
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);
Как получить доступ к журналам трассировки на устройстве
После того как система создаст журнал трассировки на вашем устройстве, вы сможете получить доступ к файлу одним из следующих способов:
Используйте Device Explorer. Чтобы открыть Device Explorer, нажмите View (Вид) > Tool Windows (Окна инструментов) > Device Explorer или нажмите кнопку Device Explorer
на панели окон инструментов. Как показано на рисунке 1, файлы .traceможно найти в каталоге пакета приложения.
Рисунок 1. Поиск журналов трассировки с помощью Device Explorer.
Скопируйте файл на локальный компьютер с помощью команды
adb pull. Команда ниже копирует журнал трассировки с названиемsample.traceс устройства в каталог~/Documents/trace-logs/на вашем локальном компьютере.adb pull path-on-device/sample.trace ~/Documents/trace-logs/
Затем вы можете импортировать файл трассировки с помощью Профилировщика ЦП.