Домой Android разработкаAndroid Studio Производительность android приложений

Производительность android приложений

by dilix
App Performance

Одно и то же Андроид приложения можно создать множеством разных способов. В зависимости от используемого подхода, с виду одинаковые программы могут потреблять разное количество ресурсов смартфона. Другими словами у них будет разная производительность.

Приложения могут потреблять разное количество памяти, процессорного времени. По разному влиять на расход батареи. Скачивать больше или меньше данных по сети. В конечном счете все это влияет на look and feel и производительность вашего андроид приложения. И именно это и отличает качественную программу от не очень…

В первую очередь а производительности надо думать при проектировании самого приложения. Во вторую при написании кода. Самый банальный пример, это использование RecyclerView вместо ScrollView когда необходимо.

Профилировщик приложения в Android Studio

Профилировщик приложения в Android studio

Профилировщик приложения в Android studio

Встроенный в Android Studio профилировщик позволяет отследить все главные метрики производительности вашего приложения, такие как: память, процессор, использование сети и потребление энергии.

Обратите внимание, что если вы обфусцировали ваше приложение, то профилирование его усложнится.

Мониторинг использования процессора

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

Чтобы понять, что именно тормозит выполнение программы достаточно

  • Перейти в CPU profiler в Android Studio
  • Нажать кнопку Record
  • Выполнить действия, которые вызывают зависание программы
  • Остановить запись

CPU Profiler в Android Studio

Android Studio покажет какие методы сколько выполнялись. Так вы сможете найти узкое место вашего приложения.

Поиск утечек памяти в приложении

В Android Studio Profiler можно заметить, что иногда, при активном использовании приложения график Memory неустанно растет. Это может означать утечку памяти в вашей программе. Android Studio позволяет посмотреть какие объекты создавались при работе программы. Таким образом, повторяя действия, которые приводят к утечке памяти можно узнать, какой тип объектов влияет на производительность.

Утечки памяти в Android < 8.0

В устройствах под управлением Android версии меньше 8.0 нужно запустить allocation tracker, выполнить действия, которые приводят к утечке и остановить трекер. Вам будет показано какие объекты успели создастся.

Созданный объекты в профилировщике Android Studio

Утечки памяти в Android >= 8.0

Используете устройство с Android 8+ на борту? Все тоже самое, что описано выше, только Allocation Tracker включен всегда. Просто выбираете участок на графике, который нужно исследовать и получаете объекты, созданные в этот промежуток.

Leak Canary

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

Мониторинг использования данных по сети

Ваше приложение активно общается с backendом? Вы можете использовать встроенный в Android studio profiler. Кажется, что в какой-то момент времени приложение слишком часто обращается к сети? Логируйте обращения к сети и смотрите куда ходит ваше приложение.

Также не забывайте не только про производительность, но и про пользователей и UX. Например, когда пропадает связь, хорошо бы про это рассказать вашему юзеру.

Мониторинг производительности приложения в production

Даже если у вас на устройство приложение работает идеально, нет гарантий что тоже самое будет у пользователя, которому вы отгрузили ваше приложение. Существует ряд решений, которые позволяют следить за производительностью андроид (и iOS) приложений у конечных пользователей.

Для базовых целей подойдет решение от Firebase, оно бесплатное и, вероятно, Firebase уже подключен к вашему проекту.

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

Профилирование GPU отрисовки

Существует baseline для скорости прорисовки содержимого вашего экране. Это 16 мс на 1 кадр. Почему 16 мс?

1 frame / 60fps ~ 16ms

Примерно столько надо, чтобы общий frame rate (частота кадров) достигала комфортного значение в 60 кадров в секунду).

Для того, чтобы проверить скорость отрисовки вашего интерфейса не обязательно расставлять везде логи. В Android есть стандартные методы замера производительности UI. Включить debug можно в настройках для разработчиков на вашем телефоне. Опция «Профилировать GPU-отрисовку».  Для наглядного представления выбираем «На экране в виде полос».

Профилирование GPU отрисовки

Профилирование GPU отрисовки

Все что ниже зеленой линии — укладывается в 16 мс.

Оптимизация Layout

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

Посмотреть области наложения и перерисовки можно выбрав пункт «Отладка наложения» в инструментах разработчика на устройстве.

Отладка наложения

Отладка наложения

Проблема с наложениями — одна из причин, почему активно разрабатывался ConstraintLayout и другие вещи, которые оптимизируют UI.

Итак, мы рассмотрели как же определить, что в вашем Android приложении есть проблемы с производительностью, а про то как отлаживать вашу программу читайте в «Debug ошибок в Android приложениях». А если вы еще не приступили к его созданию, рекомендуем ознакомиться с инструментами андроид разработчика.

Wesplit - учет совместных расходов, написан на Kotlin и Compose multiplatform
Хочешь обсудить Android разработку?
Заходи к нам Вконтакте, на Facebook и в Телеграм!

Добавить комментарий

Может быть интересно

Этот сайт использует Cookie файлы для улучшения вашего пользовательского взаимодействия. Используя данный сайт вы соглашается с этим. Принять Читать

Политика конфиденциальности и Cookies