Klasa wydajności

Klasa wydajności jest standardem wprowadzonym po raz pierwszy w Androidzie 12. Klasa wydajności definiuje zestaw funkcji urządzenia, które wykraczają poza podstawowe wymagania Androida.

Każda wersja Androida ma własną klasę wydajności, która jest zdefiniowana w dokumencie definicji zgodności Androida (Android Compatibility Definition Document). Android Compatibility Test Suite (CTS) weryfikuje wymagania CDD.

Każde urządzenie z Androidem deklaruje obsługiwaną klasę wydajności. Deweloperzy mogą sprawdzać klasę wydajności urządzenia w czasie działania i udostępniać uaktualnione funkcje, które w pełni wykorzystują możliwości urządzenia.

Aby znaleźć poziom klasy wydajności urządzenia, użyj biblioteki Core Performance w Jetpack. Ta biblioteka raportuje klasę wydajności multimediów na urządzeniu zgodnie z deklaracją w informacjach o wersji kompilacji lub na podstawie danych z Usług Google Play.

Zacznij od dodania zależności dla odpowiednich modułów w pliku Gradle:

Kotlin

// 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-beta02")
// Enable APIs to query Google Play Services for performance class.
implementation("androidx.core:core-performance-play-services:1.0.0-beta02")

Odlotowy

// 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-beta02'
// Enable APIs to query Google Play Services for performance class.
implementation 'androidx.core:core-performance-play-services:1.0.0-beta02'

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

Java

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

Następnie możesz pobrać właściwość mediaPerformanceClass, aby dostosować działanie aplikacji do funkcji urządzenia:

Kotlin

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

Java

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

Klasy wydajności są zgodne z praktyką. Urządzenie można uaktualnić do nowszej wersji platformy bez aktualizowania klasy wydajności. Na przykład urządzenie, które początkowo obsługuje klasę wydajności 12, może przejść na Androida 13 i nadal zgłaszać, że obsługuje klasę 12, jeśli nie spełnia wymagań klasy 13. Oznacza to, że klasa wydajności umożliwia grupowanie urządzeń bez korzystania z konkretnej wersji Androida.

Rysunek 1. Urządzenia mogą uaktualnić wersje Androida i nadal zgłaszać, że obsługują klasy, które pierwotnie obsługuje.

Klasa wydajności 14

Klasa wydajności 14 uzupełnia wymagania wprowadzone w klasie wydajności 13. Szczegółowe wymagania dotyczące klasy wydajności znajdziesz w Androidzie CDD. Oprócz podwyższonych wymagań dotyczących produktów z klasy wydajności 13 dokument CDD określa wymagania w tych obszarach:

Multimedia

  • Obsługa efektu ziarna w dekoderach sprzętowych AV1
  • Profil podstawowy AVIF
  • Wydajność kodera AV1
  • Kodeki wideo HDR
  • Format kolorów RGBA_1010102
  • Próbkowanie tekstur YUV
  • Jakość kodowania wideo
  • Wielokanałowe miksowanie dźwięku

Aparat

  • Rozszerzenie trybu nocnego
  • Aparat główny z obsługą HDR
  • Tryb sceny wykrywania twarzy

Ogólny

  • Nakładki na sprzęt
  • Wyświetlacz HDR

Klasa wydajności 13

Klasa 13 opiera się na wymaganiach wprowadzonych w klasie wydajności 12. Szczegółowe wymagania dotyczące klasy wydajności znajdziesz w Androidzie CDD. Oprócz zwiększonych wymagań dotyczących produktów z klasy wydajności 12 dokument CDD określa wymagania w tych obszarach:

Multimedia

  • dekoder sprzętowy AV1
  • Zabezpieczone dekodery sprzętowe
  • Opóźnienie inicjowania dekodera
  • Opóźnienie dźwięku w obie strony
  • Przewodowe zestawy słuchawkowe i urządzenia audio USB
  • Urządzenia MIDI
  • Zaufane środowisko wykonawcze ze sprzętem

Aparat

  • Stabilizacja podglądu
  • Nagrywanie w zwolnionym tempie
  • Minimalny współczynnik powiększenia dla aparatów ultraszerokokątnych
  • Kamera równoczesna
  • Logiczna wielokamerowa
  • Przypadek użycia strumienia

Klasa wydajności 12

Klasa 12 dotyczy multimediów. Szczegółowe wymagania dotyczące klasy wydajności są opublikowane w Androidzie CDD. CDD określa wymagania w tych obszarach:

Multimedia

  • Jednoczesne sesje kodeka wideo
  • Opóźnienie inicjowania kodera
  • Spadki klatek dekodera
  • Jakość kodowania

Aparat

  • Rozdzielczość i liczba klatek
  • Opóźnienia uruchamiania i przechwytywania
  • FULL lub wyższy poziom sprzętu
  • Źródło sygnatury czasowej jest dostępne w czasie rzeczywistym
  • Obsługa formatu RAW

Ogólny

  • Pamięć
  • Wydajność odczytu i zapisu
  • Rozdzielczość ekranu
  • Gęstość ekranu

Klasa wydajności 11

Klasa wydajności 11 obejmuje podzbiór wymagań dotyczących klasy wydajności 12, dzięki czemu deweloperzy mogą dostosowywać środowisko do wcześniejszych, ale wciąż zaawansowanych urządzeń. Konkretne wymagania dotyczące klasy wydajności znajdziesz w dokumencie Android CDD.