Разработка
Как Класс производительности помог Google Maps предоствить первоклассный опыт
В Android 12 Google ввел стандарт Media Performance Class (MPC), чтобы помочь разработчикам лучше понять возможности устройства и определить высокопроизводительные устройства.
Экосистема Android включает в себя широкий спектр устройств, и бывает сложно создать опыт, который бы использовал преимущества новых или премиальных аппаратных функций и при этом хорошо работал для пользователей на всех устройствах. В Android 12 Google ввел стандарт Media Performance Class (MPC), чтобы помочь разработчикам лучше понять возможности устройства и определить высокопроизводительные устройства. Чтобы узнать, что такое MPC, ознакомьтесь с последней статьей в блоге «Использование класса производительности для оптимизации работы пользователей» или посмотрите документацию по классам производительности.
В начале этого года мы опубликовали первый стабильный релиз библиотеки Jetpack Core Performance, которая является рекомендуемым решением для более надежного получения уровня MPC устройства. В частности, в этой библиотеке появился класс PlayServicesDevicePerformance
— API, который запрашивает Google Play Services, чтобы получить самый актуальный уровень MPC для текущего устройства и сборки. Далее я расскажу о технических деталях, но для начала давайте посмотрим, как Google Maps удалось адаптировать запуск функции для каждого устройства с MPC.
Класс производительности разблокирует запуск премиум-функции для Google Maps
Недавно Google Maps воспользовался расширенным покрытием устройств, обеспечиваемым модулем Play Services, чтобы разблокировать запуск одной из функций. Google Maps хотели обновить свой пользовательский интерфейс, увеличив прозрачность некоторых слоев. Соответственно, это означало, что им нужно было отрисовать большую часть карты, и они обнаружили, что вынуждены остановить развертывание из-за увеличения задержки на многих устройствах, особенно на низкоуровневых. Чтобы решить эту проблему, команда Maps начала с нарезки существующей ключевой метрики, «секунды до появления элемента пользовательского интерфейса» (seconds to UI item visibility), по уровню MPC, которая показала, что, хотя на всех устройствах наблюдалось небольшое увеличение этой задержки, устройства без уровня MPC имели самое большое увеличение.
Получив эти результаты, Google Maps снова приступили к развертыванию, но на этот раз запустили функцию только на тех устройствах, которые сообщают об уровне MPC. По мере того как устройства будут обновляться и соответствовать уровню MPC, обновленный пользовательский интерфейс Google Maps станет доступен и для них.
Новый модуль Play Services
Требования к уровню MPC определяются в Android Compatibility Definition Document (CDD), а затем устройства и сборки Android проверяются на соответствие этим требованиям с помощью пакета Android Compatibility Test Suite (CTS). Модуль Play Services библиотеки Jetpack Core Performance использует результаты этих тестов для постоянного обновления заявленного уровня MPC устройства без каких-либо дополнительных усилий с вашей стороны. Это также означает, что вы сразу же получите доступ к уровню MPC для новых устройств без необходимости приобретать и тестировать каждое устройство самостоятельно, поскольку оно уже прошло CTS. Если уровень MPC недоступен в сервисах Google Play, библиотека вернется к уровню MPC, заявленному OEM-производителем в качестве константы сборки.
На момент написания этой статьи более 190 миллионов устройств на рынке, охватывающих более 500 моделей 40+ брендов, сообщают об уровне MPC. Этот охват будет расти со временем, по мере обновления старых устройств до новых сборок, начиная с Android 11 и выше.
Использование библиотеки Core Performance
Чтобы использовать Jetpack Core Performance, начните с добавления зависимостей для соответствующих модулей в конфигурацию Gradle и создайте экземпляр DevicePerformance
. Инициализация DevicePerformance
должна происходить только один раз в вашем приложении, как можно раньше — например, в событии жизненного цикла вашего приложения onCreate()
. В этом примере мы будем использовать Google Play реализацию DevicePerformance
.
// Implementation of Jetpack Core library. implementation("androidx.core:core-ktx:1.12.0") // Enable APIs to query for device-reported performance class. implementation("androidx.core:core-performance:1.0.0") // Enable APIs to query Google Play Services for performance class. implementation("androidx.core:core-performance-play-services:1.0.0")
import androidx.core.performance.play.services.PlayServicesDevicePerformance class MyApplication : Application() { lateinit var devicePerformance: DevicePerformance override fun onCreate() { // Use a class derived from the DevicePerformance interface devicePerformance = PlayServicesDevicePerformance(applicationContext) } }
Затем, позже в приложении, когда вы захотите получить уровень MPC устройства, вы можете вызвать getMediaPerformanceClass()
:
class MyActivity : Activity() { private lateinit var devicePerformance: DevicePerformance override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) // Note: Good app architecture is to use a dependency framework. See // https://developer.android.com/training/dependency-injection for more // information. devicePerformance = (application as MyApplication).devicePerformance } override fun onResume() { super.onResume() when { devicePerformance.mediaPerformanceClass >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE -> { // MPC level 34 and later. // Provide the most premium experience for the highest performing devices. } devicePerformance.mediaPerformanceClass == Build.VERSION_CODES.TIRAMISU -> { // MPC level 33. // Provide a high quality experience. } else -> { // MPC level 31, 30, or undefined. // Remove extras to keep experience functional. } } } }
Стратегии использования класса производительности
MPC предназначен для определения устройств высокого класса, поэтому вы можете ожидать увидеть уровни MPC для лучших устройств каждого года, которые вы, скорее всего, захотите поддерживать в течение длительного времени. Например, Pixel 9 Pro, выпущенный с Android 14, имеет уровень MPC 34, что является последним определением уровня на момент его выпуска.
MPC следует использовать в качестве дополнения к уже существующим решениям по кластеризации устройств, таким как запрос статических характеристик устройства или ручная блокировка проблемных устройств. Особенно полезным инструментом MPC может стать при запуске новых устройств. Новые устройства должны быть включены в программу при запуске, поэтому вы можете использовать MPC для оценки возможностей новых устройств с самого начала, без необходимости самостоятельно приобретать оборудование или вручную тестировать каждое устройство.
Отличным первым шагом в этом направлении будет включение уровней MPC в вашу телеметрию. Это поможет вам выявить закономерности в отчетах об ошибках или в целом получить более полное представление об устройствах, которые использует ваша пользовательская база, если вы сегментируете ключевые показатели по уровню MPC. После этого вы можете рассмотреть возможность использования MPC в качестве параметра в конвейере экспериментов, например, создавая группы A/B-тестирования на основе уровня MPC или начиная развертывание функции с самого высокого уровня MPC и продвигаясь вниз. Как уже говорилось, именно такого подхода придерживался Google Maps.
Можно также использовать MPC для настройки функций, ориентированных на пользователя, например, регулируя количество одновременных воспроизведений видео в приложении. Однако при использовании этого подхода не забывайте запрашивать возможности устройства на этапе выполнения, поскольку они могут отличаться в зависимости от среды и состояния устройства.
Что дальше
Если вам кажется, что MPC может быть полезен для вашего приложения, попробуйте его! Вы можете начать работу, посмотрев пример кода или документацию.
-
Видео и подкасты для разработчиков4 недели назад
SwiftUI: алхимия приложений — превращаем идеи в реальность
-
Разработка4 недели назад
30 уроков от 30 лучших продуктовых лидеров
-
Новости4 недели назад
Видео и подкасты о мобильной разработке 2025.3
-
Магазины приложений1 неделя назад
Приложение Hot Tub появится на iOS в EC