Android studio network profiler

Android studio network profiler

The new Android Profiler window in the Android Studio 2.4 preview replaces the Android Monitor . The advanced profiling tools display realtime data updates for CPU, memory, and network activity.

The default view in the Android Profiler window, as shown in figure 1, displays a simplified set of data for each profiler. You must first select (1) the device and (2) the app process you want to profile. You can then click one of the graphs to see the more detailed timeline. Every view also includes (3) timeline zoom controls, (4) a button to jump to the realtime data, and an (5) event timeline that shows the lifecycle of activities and see all input events and screen rotation events.

Figure 1. The Android Profiler overview, showing the timeline for all profilers

CPU Profiler

The CPU Profiler shows realtime CPU usage for your app process and system-wide CPU usage on a timeline.

You can select between (1) a traditional instrumented trace (method traces) and a sample-based trace. Then click (2) Record to begin tracing your code. Once you’re done recording, the timeline indicates (3) the captured region, you can (4) view the state of each thread, and (5) see either a top-down list, bottom-up list, or flame chart for the methods that have executed during the recording.

Figure 2. The CPU Profiler, with results from sampled method tracing

Memory Profiler

The Memory Profiler view combines the features from Heap Viewer, Allocation Tracker, and Memory Monitor, so you can view realtime count of allocated objects and garbage collection events on a timeline, capture heap dumps, and record memory allocations, all from one interface.

The Memory Profiler shows the amount of memory used by your app on a timeline, according to the memory size on the left y-axis. Each memory type (such as Java, Native, and Graphics) is indicated with a different color in a stacked graph. The total number of objects allocated by your app is indicated with a dotted line, according to the y-axis on the right. Values for each are also specified in a key at the top of the graph.

The toolbar at the top of the window allows you to (1) Force garbage collection, (2) Capture a heap dump , and (3) Record memory allocations.

When you capture a heap dump or record memory allocations, the (4) recording event is indicated on the timeline. Your results then appear in (5) the pane below the timeline. In figure 2, this window shows the memory allocation results during the time indicated in the timeline. When viewing either a heap dump or memory allocations, you can select a class name from this list to view the (6) list of instances on the right. Clicking an instance there, reveals (7) a third pane below, showing either the stack trace for where that memory was allocated (when viewing the allocation record), or the remaining references to that object (when viewing a heap dump).

You can also capture a heap dump while memory allocation tracking is turned on to get stack traces in the heap dump (for objects allocated after allocation was turned on).

Network Profiler

The Network Profiler displays realtime network activity on a timeline, showing data sent and received, as well as the current number of connections. At the top of the window, you can see the event timeline and (1) radio power state (high/low) vs Wi-Fi.

Читайте также:  Сказочная ферма для андроид

On the timeline, you can (2) click and drag to select a portion of the timeline to inspect the traffic. The (3) window below then shows files sent and received during the selected portion of the timeline, including file name, size, type, status, and time. You can sort this list by clicking any of the column headers. You also see a detailed breakdown of the selected portion of the timeline, showing when each file was sent or received.

Click a file name to view (4) detailed information about a selected file sent or received. Click the tabs to view the response data, header information, or the call stack.

Network Connection Troubleshooting

If the Network Profiler detects traffic values, but cannot identify any supported network requests, you will receive the following error message:

“No connections supported for instrumentation.”

Currently, the Network Profiler only supports the HttpURLConnection library for network connections. If your app uses another network connection library, you will not be able to view your network activity in the Network Profiler. If you have received this error message, but your app does use HttpURLConnection , please report a bug so we can investigate the issue.

Источник

Пишем свой профайлер для анализа производительности приложения на Android

По мере развития приложения стоит проводить её аудит для выявления неявных деградаций в производительности. Недавно я проводил аудит раздела комментариев iFunny и написал собственный профайлер. Он не заменит имеющиеся на рынке инструменты Android Profile из Android Studio, Battery Historian и Systrace, но обладает рядом плюсов:

Негативное влияние профилировщика на производительность приложения сводится к минимуму

Документация итераций оптимизации работы приложения.

Гибкость в сборе метрик.

Далее расскажу про существующие инструменты подробнее и перейдём к анализу использования процессорного времени, памяти, использования сети и потребления батареи с помощью кастомного решения.

Общеизвестные инструменты

Их не так много, основные я уже перечислил, рассмотрим их подробнее.

1. Android Profiler. Встроен в Android Studio, он позволяет отслеживать потребление CPU, Memory, Network и Energy во время использования приложения и предоставляет много полезных инструментов. Но у него есть как плюсы, так и минусы.

Довольно обширный функционал.

Централизованность, всё в одном месте.

В работе приложения появляются тормоза из-за механизмов сбора метрик, это не позволяет контролировать основные параметры потребления ресурсов, приближённые в использовании к реальным условиям.

Приложение может спонтанно крашиться.

Отсутствие гибкости в сборке метрик. Например, чтобы не дампить постоянно heap память на критических показателях, хочется, чтобы Android Profiler делал это за тебя.

2. Systrace. Инструмент, позволяющий собирать и инспектировать время работы частей кода по всем процессам на девайсе.

3. Battery Historian. Нужен, чтобы получить дополнительную информацию по работе приложения, например, процент потребления батарейки и условия, влияющие на потребление.

Изначально основным инструментом для профилирования я выбрал Android Profiler, но его минусы показались критичными. Хочется показать наглядно и количественно с наименьшей погрешностью этапы оптимизации комментариев. Поэтому решил написать свой профилировщик и строить на его основе графики в любом удобном инструменте, например, Excel или Numbers.

В качестве движка по выполнению долгих рутинных повторяющихся действий можно использовать фреймворк автотестов Espresso.

Получить процент использования процессорного времени процессом приложения довольно сложная задача, но так как Android разработан на базе операционной системы Linux, то можно выполнить специальную команду, распарсить ответ и зафиксировать полученное значение.

Например, можно использовать команду /proc/

/stat , а PID получить из android.os.Process.myPid(). Но в Android O ограничили доступ к /proc, что заставило использовать другую команду top -n 1, где -n — количество итераций обновлений. Ниже представлен код, фиксирующий значение потребления CPU соответствующего процесса.

Читайте также:  Откат обновления андроид samsung galaxy

recordCpu() завернут в try-catch, так как на некоторых девайсах могут возникать ошибки. Все полученные значения записываются в cpu_usage.txt, откуда берутся данные для построения аналитической информации и построения графиков.

Memory

С памятью всё довольно просто, есть классы Debug и Runtime, которые предоставляют необходимый функционал. Если heap память заполняется на 90%, то запускается механизм дампинга памяти автоматически. Таким образом, разработчику не нужно следить за ходом выполнения тестов и он может спокойно пойти попить кофе. После выполненных тестов дамп можно открыть с помощью Android Profiler в Android Studio (Profiler → + → Load from file). Ниже представлен код, анализирующий потребление памяти приложением.

Таким образом, в файле mem_usage.txt образовывается несколько колонок с необходимой информацией, которую можно анализировать по-разному с аналитической точки зрения.

Network

Для метрик использования сети доступен класс android.net.TrafficStats, при помощи которого можно получить принятый и переданный трафик. Ниже представлен код фиксирования трафика данных. Все данные записываются в файл network_usage.txt.

Battery

Получение метрик потребления батарейки также довольно простая задача. BatteryManager хранит текущий статус заряда батареи в sticky Intent, который можно получить, если передать в метод registerReceiver IntentFilter c action Intent.ACTION_BATTERY_CHANGED без регистрации ресивера (его, конечно, можно передать, но в данной задачи этого не требуется).

Ниже код получения метрик использования батареи.

Все экспортёры метрик управляются AppMetricUsageManager. Раз в секунду происходит анализ потребления ресурсов и соответствующие значения заносятся по файлами, указанных в экспортёрах. Его код довольно прост:

safeDispose() — экстеншен, который выполняет dispose, если Observable не null или не задиспоузен ранее.

После проведённых тестов можно получить красивые графики:

Возникает резонный вопрос. А зачем все это, если есть профайлер?

Как я и говорил в начале статьи, у кастомного решения есть ряд преимуществ по отношению к Android Profiler — это отсутствие крашей, замедлений приложения, гибкость в сборе метрик и составление документации для анализа хода выполнения оптимизаций. В тоже время данный подход не является заменой Android Profiler, Systrace или Battery Historian, а лишь дополняет их.

Источник

Инструменты отладки Android

Чтобы делать высококачественный продукт, разработчики должны быстро и своевременно находить и исправлять ошибки. В этой статье мы поговорим об одной из наиболее важных частей процесса разработки программного обеспечения — отладке кода.

В Techery мы использовали много разных инструментов отладки, и у каждого из них есть свои преимущества. Мы сделали обзор и делимся нашим опытом использования нескольких инструментов. Надеемся, что эта статья поможет вам решить, какой из них использовать:

  • Android Profiler — профилировщик Android Studio;
  • Facebook Stetho — ADB для Android-приложений;
  • DebugDrawer — отладочная навигационная панель в приложении для быстрой отладки;
  • AppSpector — инструмент отладки для Android и iOS.

Android Studio Profiler

Инструмент Android Profiler предоставляет данные в реальном времени, которые помогут вам профилировать сетевой уровень и понять, как приложение использует ресурсы процессора, памяти и батареи.

Возможности

Окно профилировщика показывает загрузку процессора, памяти, сети и батареи и выглядит следующим образом:

Мониторинг сети

Если вы щёлкнете по временной шкале сети, то увидите подробную информацию о запросах:

В окне выше есть вкладка «Connection View», в которой отображается список запросов с размером, временем, состоянием, запросом и ответом.

Проверка памяти

Профилировщик памяти показывает график использования ОЗУ и выглядит следующим образом:

Используя эту функциональность, вы можете найти функции, которые создают дополнительные объекты и мешают сборке мусора.

Расширенное профилирование

Вы можете отредактировать настройки запуска (Run configuration) вашего приложения, чтобы включить расширенное профилирование:

Характеристики, предоставляемые расширенным профилированием:

  • Все окна профилировщика поддерживают временную шкалу.
  • Memory Profiler показывает количество выделенных объектов.
  • Memory Profiler показывает события сборки мусора.
  • Network Profiler показывает подробную информацию обо всех передаваемых файлах.

Плюсы

  • Профилировщик Android Studio работает «из коробки», и вам не нужно интегрировать сторонние зависимости в ваш проект.
  • Доступные проверки (сеть, процессор, память, энергия) показывают исчерпывающую информацию о вашем приложении.
  • Хорошая реализация мониторинга сети: можно выбрать временные рамки и тщательно проверять запросы.
Читайте также:  Warplanes inc для андроид

Минусы

  • Нет профилировщика для базы данных, что заставляет использовать сторонние инструменты.

Facebook Stetho

Stetho — это ADB для Android, который позволяет получить доступ к инструментам разработчика Chrome для проверки вашего приложения.

Интеграция

Чтобы загрузить библиотеку Stetho в свой проект, добавьте следующую строку в блок зависимостей:

Для инициализации Stetho вы должны добавить следующую строку в метод onCreate() класса Application вашего приложения:

Чтобы Stetho смог отображать данные сети с помощью OkHttp-клиента, вы должны добавить такой перехватчик:

Возможности

Stetho позволяет вам просматривать уровни сети и хранилища вашего приложения:

Мониторинг сети

Вкладка «Network» показывает таблицу с запросами и выглядит следующим образом:

В таблице показан статус, тип, время, размер и метод каждого запроса. Нужно просто нажать на строку, чтобы увидеть подробную информацию:

Мониторинг баз данных

Вкладка «Resource» показывает таблицу SQLite вашего приложения и выглядит следующим образом:

Это окно представляет собой простую таблицу без поиска и пагинации. Там могут быть ошибки: например, на скриншоте выше вы можете увидеть два столбца id.

Пример проекта

Вы можете найти образец проекта здесь.

Плюсы

  • Это бесплатный инструмент.
  • Он позволяет проверять уровни сети и хранилища.
  • Чтобы проверить базу данных Realm, вы можете установить библиотеку Stetho-Realm.

Минусы

  • Ошибки.
  • Уродливый пользовательский интерфейс.
  • Не очень богатая функциональность.

DebugDrawer

Это инструмент, который позволяет интегрировать отладочную навигационную панель в ваше приложение.

Интеграция

Для загрузки DebugDrawer необходимо добавить следующую строку в блок зависимостей файла build.gradle :

Вы можете настроить функциональность отладочной навигационной панели, добавив различные модули в ваш проект. Например, если вы хотите проверить сетевой уровень вашего приложения, вы можете добавить следующую строку:

Чтобы инициализировать DebugView, вы должны добавить следующие строки в метод onCreate() вашей Activity:

Возможности

Отладочная навигационная панель в зависимости от вашей конфигурации может выглядеть следующим образом:

DebugDrawer позволяет быстро проверить информацию о вашем устройстве, изменить настройки или «подделать» ваше местоположение.

Мониторинг сети

DebugView использует библиотеку Chuck внутри себя и позволяет вам проверять сетевые запросы:

Библиотека Chuck показывает список всех запросов и позволяет вам посмотреть их подробности.

Пример проекта

Вы можете посмотреть пример здесь.

Плюсы

  • DebugDrawer даёт вам быстрый доступ к информации и настройкам устройства, позволяет имитировать местоположение и состояние сетевого подключения.

Минусы

  • Довольно трудно проверять сетевой запрос на экране мобильного устройства.
  • Нет возможности проверки уровня базы данных.

AppSpector

AppSpector — это сервис для отладки приложений на iOS и Android, который позволяет удаленно проверять и контролировать свои приложения в режиме реального времени с помощью простого интерфейса. Полная документация доступна здесь.

Интеграция

Чтобы начать работу с AppSpector, вам нужно пройти простую регистрацию и создать свой проект.

Чтобы интегрировать AppSpector в ваше приложение, вы должны изменить файл build.gradle следующим образом:

Инициализируйте AppSpector в методе onCreate() в классе Application вашего приложения:

Возможности

Когда вы запустите ваше приложение, будет создан новый сеанс, и вы увидите его в главном окне AppSpector в браузере:

Когда вы нажимаете на определённую сессию, вы можете проверить своё приложение, используя различные мониторы.

Проверка производительности

В окне «Performance» отображаются графики с различными показателями, такими как ЦП, память, сеть, диск, FPS и батарея.

Этот монитор помогает обнаружить утечки ресурсов, использование диска и FPS.

Мониторинг сети

Монитор сети показывает таблицу с запросами. Вы можете нажать на определённую строку, чтобы увидеть подробную информацию о запросе и ответе:

В этом окне также есть функции поиска, фильтрации и экспорта.

Их очень удобно использовать, если приложение большое.

Мониторинг базы данных

Монитор SQLite позволяет вам мониторить базу данных и вызывать SQL-запросы.

Определённую запись легко найти, т.к. в этом мониторе несколько страниц.

Источник

Оцените статью