Инструкции

Руководство по повышению уровня вашей производительности

9 минут чтения
Alice Yuan
Инженер по связям с разработчиками

Руководство по повышению уровня вашей производительности

Добро пожаловать на 4-й день Недели повышения производительности. Теперь, когда вы узнали о некоторых замечательных инструментах и ​​лучших практиках, которые мы недавно представили, таких какоптимизатор R8 и оптимизация на основе профилей с использованием базовых и стартовых профилей , вы, возможно, задаетесь вопросом, с чего начать свой путь к повышению производительности.

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

Руководство по выравниванию производительности включает 5 уровней. Мы начнем с уровня 1, который знакомит с инструментами повышения производительности, требующими минимальных усилий по внедрению, и перейдем к уровню 5, идеально подходящему для приложений, которые располагают ресурсами для поддержки собственной системы управления производительностью.


Вы можете перейти на тот уровень, который вам больше всего подходит:

Уровень 1: Используйте систему мониторинга Play Console.

Мы рекомендуем сначала использовать Android Vitals в Play Console для просмотра автоматически собираемых данных полевого мониторинга, что позволит вам с минимальными усилиями получить представление о вашем приложении.

Android Vitals — это инициатива Google по автоматическому сбору и отображению этих полевых данных.

Вот объяснение того, как мы предоставляем эти данные:

  1. Сбор данных: Если пользователь дает согласие, его устройство Android автоматически регистрирует ключевые события, влияющие на производительность и стабильность всех приложений, включая ваше.
  2. Агрегированные данные: Google Play собирает и анонимизирует эти данные от пользователей вашего приложения.
  3. Аналитические данные Surface Insights: эти данные отображаются на панели мониторинга Android Vitals в вашей консоли Google Play.

Панель мониторинга Android Vitals отслеживает множество показателей, но некоторые из них обозначены как «Ключевые показатели» . Они наиболее важны, поскольку могут повлиять на видимость и рейтинг вашего приложения в Google Play Store.

Основные жизненно важные показатели

Основные технические показатели качества Google Play

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

Частота сбоев, воспринимаемая пользователем Процент ежедневно активных пользователей, у которых произошел хотя бы один заметный сбой.
Воспринимаемый пользователем показатель ANR Процент ежедневно активных пользователей, у которых наблюдалось хотя бы одно заметное нарушение слуха (ANR).
Чрезмерное потребление заряда батареи Процент сеансов использования циферблата, в которых расход заряда батареи превышает 4,44% в час.
Новое: Чрезмерное частичное блокирование пробуждения Процент пользовательских сессий, в которых суммарное использование блокировки пробуждения, не подпадающее под исключения, превышает 2 часа.

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

Воспринимаемая пользователем частота ANR

С помощью панели мониторинга Android Vitals ANR вы можете просмотреть трассировки стека проблем, возникающих в реальных условиях, и получить информацию и рекомендации по их устранению.

crashesAnrs.png

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

insights.png

Также ознакомьтесь с нашими рекомендациями по устранению ANR , которые помогут вам диагностировать и устранять распространенные ситуации, в которых могут возникать ANR.

Пользовательский показатель частоты сбоев

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

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

Чрезмерное потребление заряда батареи

Чтобы уменьшить количество сеансов использования циферблатов, потребляющих слишком много заряда батареи в Wear OS, ознакомьтесь с руководством Wear OS о том, как улучшить и сэкономить заряд батареи .

[новое] Чрезмерное частичное блокирование пробуждения

Недавно мы объявили, что приложения, превышающие пороговое значение чрезмерного частичного отключения экрана, могут получить дополнительную поддержку начиная с 1 марта 2026 года .

Для мобильных устройств метрика Android Vitals применяется к неисключенным блокировкам пробуждения, полученным при выключенном экране и работе приложения в фоновом режиме или с запущенной службой переднего плана. Android Vitals считает использование частичной блокировки пробуждения чрезмерным, если блокировка удерживается не менее двух часов в течение 24 часов и затрагивает более 5% сессий вашего приложения в среднем за 28 дней.

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

Ознакомьтесь с нашей документацией по Android Vitals и продолжите свой путь к более эффективному использованию Android Vitals.

Уровень 2: Выполните действия, указанные в разделе «Оценка производительности приложения».

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

Показатель производительности Android-приложений (Android App Performance Score) — это стандартизированная система оценки технической производительности вашего приложения. Он присваивает вам оценку от 0 до 100, где меньшее число указывает на необходимость дальнейшего улучшения.

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

Шаг 1: Проведите статическую оценку

Статическая оценка анализирует конфигурацию вашего проекта и используемые инструменты. Зачастую это самые быстрые способы повышения производительности.

Перейдите в раздел «Статический счет» на странице табло и выполните следующие действия:

  1. Оцените версию плагина Android Gradle (AGP).
  2. Внедряйте минификацию в R8 постепенно или, в идеале, используйте R8 в полном режиме для минификации и оптимизации кода приложения.
  3. Внедрение базовых профилей повышает скорость выполнения кода с первого запуска, обеспечивая улучшение производительности при каждой новой установке и каждом обновлении приложения.
  4. Используйте профили запуска для улучшения структуры DEX-кода. Профили запуска используются системой сборки для дальнейшей оптимизации классов и методов, содержащихся в них, путем улучшения структуры кода в DEX-файлах вашего APK-файла.
  5. Обновите Jetpack Compose до последней версии.

Шаг 2: Проведите динамическую оценку.

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

Перейдите в раздел «Динамический счет» на странице табло и выполните следующие действия:

  1. Настройте тестовую среду с помощью физического устройства. Рассмотрите возможность использования устройства более низкого класса, чтобы усилить проблемы с производительностью и упростить их обнаружение.
  2. Измерьте время запуска приложения через панель запуска. Запустите приложение с нуля, используя значок в панели запуска, и измерьте время, пока оно не станет интерактивным.
  3. Измерьте время запуска приложения после получения уведомления с целью сократить это время до менее чем нескольких секунд.
  4. Оцените производительность рендеринга, прокручивая основные экраны и анимации.

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

Уровень 3: Использование локальных фреймворков для тестирования производительности.

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

Макробенмарк 💚 UiAutomator

Представьте Macrobenchmark и UiAutomator как два инструмента, работающих вместе: Macrobenchmark — это инструмент измерения. Это как секундомер и счетчик частоты кадров, работающие вне вашего приложения. Он отвечает за запуск приложения, запись метрик (например, время запуска или пропущенные кадры) и остановку приложения. UiAutomator — это робот-пользователь. Библиотека позволяет писать код для взаимодействия с экраном устройства. Он может находить значок, нажимать кнопку, прокручивать список и многое другое.

Как написать тест

При написании теста вы заключаете код UiAutomator в блок Macrobenchmark.

  1. Определите тест: используйте правило @MacrobenchmarkRule
  2. Начать измерение: Вызовите метод benchmarkRule.measureRepeated .
  3. Управление пользовательским интерфейсом: внутри этого блока используйте код UiAutomator для запуска приложения, поиска элементов пользовательского интерфейса и взаимодействия с ними.

Вот пример фрагмента кода, демонстрирующий, как выглядит тестирование списка Compose на предмет проблем с прокруткой.

  benchmarkRule.measureRepeated(

    // ...

    metrics = listOf(

        FrameTimingMetric(),

    ),

    startupMode = StartupMode.COLD,

    iterations = 10,

) {

    // 1. Launch the app's main activity

    startApp()

    // 2. Find the list using its resource ID and scroll down

    onElement { viewIdResourceName == "$packageName.my_list" }

        .fling(Direction.DOWN)

}

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

  timeToInitialDisplayMs  min  1894.4,   median 2847.4,   max  3355.6


frameOverrunMs          P50 -3.2,  P90  6.2, P95  10.4, P99  119.5

Типичные сценарии использования

Macrobenchmark предоставляет несколько основных метрик «из коробки». StartupTimingMetric позволяет точно измерить время запуска приложения. FrameTimingMetric позволяет понять производительность рендеринга приложения во время теста.

У нас есть подробное и полное руководство по использованию Macrobenchmarks и UiAutomator , а также примеры кода, которые помогут вам продолжить обучение.

Уровень 4: Используйте инструменты анализа трассировки, такие как Perfetto.

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

Посмотрите наш плейлист на YouTube, посвященный отладке производительности , где вы найдете видеоинструкции по отладке производительности с использованием системных трассировок, Android Studio Profiler и Perfetto.

Как использовать Perfetto для отладки производительности

Общий алгоритм отладки производительности с использованием инструментов анализа трассировки заключается в записи, загрузке и анализе трассировки.

Шаг 1: Запишите трассировку

Запись трассировки системы можно выполнить несколькими способами:

Шаг 2: Загрузите трассировку

После получения файла трассировки необходимо загрузить его в инструмент анализа.

  1. Откройте Chrome и перейдите по адресу ui.perfetto.dev .
  2. Перетащите файл .perfetto-trace (или .pftrace ) прямо в окно браузера.
  3. Пользовательский интерфейс обработает файл и отобразит временную шкалу.

Шаг 3: Анализ трассировки

Для исследования проблем с производительностью можно использовать Perfetto UI или Android Studio Profiler. Посмотрите этот эпизод серии MAD Skills о производительности, где наш инженер по производительности Кармен Джексон рассказывает о программе просмотра трассировки Perfetto.

Сценарии анализа трассировки системы с помощью Perfetto

Perfetto — это экспертный инструмент, способный предоставить информацию обо всем, что происходило на устройстве Android во время записи трассировки. Это особенно полезно, когда невозможно определить первопричину замедления работы с помощью стандартных логов или базовых профилировщиков.

Отладка проблем (пропущенные кадры)

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

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

Если проблема связана с системой, вы можете видеть, что ваш основной поток готов к выполнению, но планировщик ядра ЦП отдал приоритет другой системной службе, в результате чего ваше приложение ожидает (конкуренция за ЦП). Это указывает на сценарии, в которых может потребоваться оптимизация использования API платформы.

Анализ медленного запуска приложений

Запуск системы — сложный процесс, включающий инициализацию системы, создание дочерних процессов и загрузку ресурсов. Perfetto точно визуализирует эту временную шкалу.

Вы можете увидеть, ожидаете ли вы вызовов Binder (межпроцессное взаимодействие). Если ваш onCreate долго ожидает ответа от системного PackageManager , Perfetto четко отобразит это состояние блокировки.

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

Исследование энергопотребления и загрузки процессора.

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

Вы можете определить, какие процессы удерживают блокировки пробуждения, препятствуя переходу устройства в спящий режим, используя треки «Состояние устройства». Подробнее об этом читайте в нашей статье в блоге о блокировках пробуждения . Также используйте Perfetto, чтобы проверить, не запускаются ли ваши фоновые задачи слишком часто или не пробуждают ли они процессор без необходимости.

Уровень 5: Создайте собственную систему отслеживания производительности.

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

Создание собственной системы отслеживания производительности на Android предполагает использование нескольких системных API для сбора данных на протяжении всего жизненного цикла приложения, от запуска до завершения работы, а также в условиях высокой нагрузки.

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

ApplicationStartInfo: Отслеживание процесса запуска приложения.

Доступное начиная с Android 15 (API 35), приложение ApplicationStartInfo предоставляет подробные метрики о запуске приложений в реальных условиях. Данные включают информацию о том, был ли это холодный, теплый или горячий запуск, а также продолжительность различных фаз запуска.

Это поможет вам разработать базовый показатель для запуска проекта, используя данные из производственной среды, чтобы затем оптимизировать процесс, который может быть сложно воспроизвести локально. Вы можете использовать эти показатели для проведения A/B-тестов, оптимизирующих процесс запуска.

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

Вы можете запросить эти данные в фоновом режиме через некоторое время после запуска приложения.

ProfilingManager: Выяснение причин медленной работы.

ProfilingManager (API 35) позволяет вашему приложению программно запускать трассировку системы на устройствах пользователей. Это мощный инструмент для выявления временных проблем с производительностью в реальных условиях, которые невозможно воспроизвести локально.

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

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

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

ApplicationExitInfo: Отслеживание причины завершения работы приложения.

ApplicationExitInfo (API 30) сообщает вам причину завершения предыдущего процесса. Это крайне важно для обнаружения сбоев нативных процессов, ошибок ANR или системных ошибок, вызванных чрезмерным использованием памяти (OOM). Вы также сможете получить подробную трассировку "удаленного процесса" с помощью API getTraceInputStream .

Цель API — выявить проблемы со стабильностью, которые не вызывают срабатывания стандартных механизмов отслеживания сбоев Java (например, ошибки, связанные с нехваткой памяти).

Вам следует активировать этот API в следующих случаях:   следующий запуск приложения.

Следующие шаги

Улучшение производительности Android — это поэтапный процесс. Мы с нетерпением ждём, как вы повысите производительность с помощью этих инструментов!

Следите за обновлениями завтра в рубрике «Спроси Android».

Вы уменьшили размер своего приложения с помощью R8 и оптимизировали его работу во время выполнения с помощью оптимизации на основе профилирования. И измерьте производительность своего приложения.

Присоединяйтесь к нам завтра на прямой эфир Ask Android. Задавайте свои вопросы прямо сейчас, используя хэштег #AskAndroid, и получайте ответы от экспертов.

    Автор:

    Продолжить чтение