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

Класс производительности — это стандарт, впервые представленный в Android 12. Класс производительности определяет набор возможностей устройства, выходящий за рамки базовых требований Android.

Каждой версии Android соответствует свой собственный класс производительности, который определен в документе определения совместимости Android (CDD) этой версии. Набор тестов совместимости Android (CTS) проверяет требования CDD.

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

Чтобы узнать уровень класса производительности устройства, используйте библиотеку Jetpack Core Performance . Эта библиотека сообщает о классе производительности мультимедиа устройства, указанном в информации о версии сборки или на основе данных сервисов Google Play.

Начните с добавления зависимости для соответствующих модулей в ваш файл gradle:

Котлин

// 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")

классный

// 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'

Then, create an instance of a DevicePerformance implementation, such as PlayServicesDevicePerformance, in the onCreate() lifecycle event of your Application. This should only be done once in your app.

Kotlin

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)
  }
}

Ява

import androidx.core.performance.play.services.PlayServicesDevicePerformance;

class MyApplication extends Application {
  DevicePerformance devicePerformance;

  @Override
  public void onCreate() {
    // Use a class derived from the DevicePerformance interface
    devicePerformance = new PlayServicesDevicePerformance(applicationContext);
  }
}

Затем вы можете получить свойство mediaPerformanceClass , чтобы адаптировать работу вашего приложения в зависимости от возможностей устройства:

Котлин

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.TIRAMISU -> {
        // Performance class level 13 and later.
        // Provide the most premium experience for the highest performing devices.
      }
      devicePerformance.mediaPerformanceClass == Build.VERSION_CODES.S -> {
        // Performance class level 12.
        // Provide a high quality experience.
      }
      else -> {
        // Performance class level 11 or undefined.
        // Remove extras to keep experience functional.
      }
    }
  }
}

Ява

class MyActivity extends Activity {
  private DevicePerformance devicePerformance;
  @Override
  public void onCreate(Bundle savedInstanceState) {
    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 = ((MyApplication) getApplication()).devicePerformance;
  }

  @Override
  public void onResume() {
    super.onResume();
    if (devicePerformance.getMediaPerformanceClass() >= Build.VERSION_CODES.TIRAMISU) {
      // Performance class level 13 and later.
      // Provide the most premium experience for the highest performing devices.
    } else if (devicePerformance.getMediaPerformanceClass() == Build.VERSION_CODES.S) {
      // Performance class level 12.
      // Provide a high quality experience.
    } else {
      // Performance class level 11 or undefined.
      // Remove extras to keep experience functional.
    }
  }
}

Классы производительности являются совместимыми с будущими версиями. Устройство можно обновить до более новой версии платформы без обновления класса производительности. Например, устройство, которое изначально поддерживает класс производительности 12, может обновиться до Android 13 и продолжать сообщать о поддержке класса 12, если оно не соответствует требованиям класса 13. Это означает, что класс производительности позволяет группировать устройства без зависимости от конкретной версии Android.

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

Класс производительности 14

Класс производительности 14 основан на требованиях, представленных в классе производительности 13. Конкретные требования к классу производительности опубликованы в Android CDD . Помимо повышенных требований к изделиям 13-го класса эффективности, CDD устанавливает требования в следующих областях:

СМИ

  • Поддержка эффекта зернистости пленки в аппаратных декодерах AV1
  • Базовый профиль AVIF
  • Производительность кодера AV1
  • HDR-видеокодеки
  • Цветовой формат RGBA_1010102
  • Выборка текстур YUV
  • Качество кодирования видео
  • Многоканальное микширование звука

Камера

  • Расширение ночного режима
  • Основная камера с поддержкой HDR
  • Сюжетный режим обнаружения лиц

Общий

  • Аппаратные накладки
  • HDR-дисплей

Класс производительности 13

Класс производительности 13 основан на требованиях, представленных в классе производительности 12. Конкретные требования к классу производительности опубликованы в Android CDD . Помимо повышенных требований к изделиям 12-го класса эффективности, CDD устанавливает требования в следующих областях:

СМИ

  • Аппаратный декодер AV1
  • Безопасные аппаратные декодеры
  • Задержка инициализации декодера
  • Задержка звука в обе стороны
  • Проводные гарнитуры и аудиоустройства USB
  • MIDI-устройства
  • Доверенная среда выполнения с аппаратной поддержкой

Камера

  • Предварительный просмотр стабилизации
  • Замедленная запись
  • Минимальный коэффициент масштабирования для сверхширокоугольных камер
  • Параллельная камера
  • Логическая многокамерная камера
  • Вариант использования потока

Класс производительности 12

Класс производительности 12 ориентирован на сценарии использования мультимедиа. Требования к конкретному классу производительности опубликованы в Android CDD . CDD определяет требования в следующих областях:

СМИ

  • Параллельные сеансы видеокодека
  • Задержка инициализации кодировщика
  • Пропадает кадр декодера
  • Качество кодирования

Камера

  • Разрешение и частота кадров
  • Задержки при запуске и захвате
  • FULL или более высокий аппаратный уровень
  • Источник временной метки — в реальном времени.
  • Возможности RAW

Общий

  • Память
  • Чтение и запись производительности
  • Разрешение экрана
  • Плотность экрана

Класс производительности 11

Класс производительности 11 включает в себя подмножество требований класса производительности 12, что позволяет разработчикам обеспечить индивидуальный подход к более ранним, но все еще высокофункциональным устройствам. Требования к конкретному классу производительности опубликованы в Android CDD .

{% дословно %} {% дословно %} {% дословно %} {% дословно %}