Klasa wydajności

Klasa wydajności to standard wprowadzony po raz pierwszy w Androidzie 12. Klasa wydajności określa zestaw funkcji urządzenia, który wykracza poza podstawowe wymagania Androida.

Każda wersja Androida ma swoją klasę wydajności, która jest zdefiniowana w dokumentacji zdefiniowanej zgodności Androida (CDD). Kompatybilność z Androidem – testy CTS weryfikuje zgodność z CDD.

Każde urządzenie z Androidem deklaruje klasę wydajności, którą obsługuje. Deweloperzy mogą w czasie działania aplikacji określić klasę wydajności urządzenia i zapewnić ulepszone wrażenia, które w pełni wykorzystują możliwości urządzenia.

Aby znaleźć poziom klasy wydajności urządzenia, użyj biblioteki Jetpacka Core Performance. Ta biblioteka raportuje poziom klasy wydajności multimediów (MPC) urządzenia 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")
// Enable APIs to query Google Play services for performance class.
implementation("androidx.core:core-performance-play-services:1.0.0")

Groovy

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

Następnie utwórz instancję implementacji DevicePerformance, np. PlayServicesDevicePerformance, w zdarzeniu cyklu życia Application onCreate(). Wystarczy skonfigurować to raz w aplikacji.

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ć usługę mediaPerformanceClass, aby dostosować działanie aplikacji do możliwości 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.VANILLA_ICE_CREAM -> {
        // MPC level 35 and later.
        // Provide the most premium experience for the highest performing devices.
      }
      devicePerformance.mediaPerformanceClass == Build.VERSION_CODES.UPSIDE_DOWN_CAKE -> {
        // MPC level 34.
        // Provide a high quality experience.
      }
      else -> {
        // MPC level 33, 31, 30, 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.VANILLA_ICE_CREAM) {
      // MPC level 35 and later.
      // Provide the most premium experience for the highest performing devices.
    } else if (devicePerformance.getMediaPerformanceClass() == Build.VERSION_CODES.UPSIDE_DOWN_CAKE) {
      // MPC level 34.
      // Provide a high quality experience.
    } else {
      // MPC level 33, 31, 30, or undefined.
      // Remove extras to keep experience functional.
    }
  }
}

Poziomy klasy wydajności są zgodne wstecz. Urządzenie może przejść na nowszą wersję platformy bez aktualizacji klasy wydajności. Na przykład urządzenie, które początkowo obsługuje klasę wydajności 33, może zostać uaktualnione do Androida 14 i nadal zgłaszać, że obsługuje klasę wydajności 33, jeśli nie spełnia wymagań klasy wydajności 34. Umożliwia to grupowanie urządzeń bez konieczności korzystania z konkretnej wersji Androida.

Rysunek 1. Urządzenia mogą aktualizować wersje Androida i nadal raportować, że obsługują zajęcia, które obsługują pierwotnie.

Klasa skuteczności mediów 35

MPC 35 zostało wprowadzone w Androidzie 15 i rozwija wymagania wprowadzone w MPC 34. Wymagania MPC 35 są publikowane w specyfikacji CDD Androida 15. Oprócz zwiększonych wymagań dotyczących elementów z MPC 34 dokument CDD zawiera wymagania dotyczące tych obszarów:

Multimedia

  • Pominięte klatki podczas dekodowania
  • Edytowanie HDR
  • Dynamiczne aspekty kolorów
  • Format obrazu w pionie

Aparat

  • JPEG_R
  • Stabilizacja podglądu

Grafika

  • Rozszerzenia EGL
  • Struktury Vulkan

Klasa skuteczności kampanii w mediach 34

MPC 34 zostało wprowadzone w Androidzie 14 i rozwija wymagania wprowadzone w MPC 33. Wymagania MPC 34 są publikowane w dokumentacji CDD Androida 14. Oprócz zwiększonych wymagań dotyczących elementów z MPC 33 dokument CDD zawiera wymagania dotyczące tych obszarów:

Multimedia

  • Obsługa efektu ziarna filmu w dekoderach sprzętowych AV1
  • Profil podstawowy AVIF
  • Wydajność kodera AV1
  • Kodek wideo HDR
  • Format kolorów RGBA_1010102
  • Próbkowanie tekstury YUV
  • Jakość kodowania filmu
  • Miksowanie dźwięku wielokanałowego

Aparat

  • Rozszerzenie trybu nocnego
  • Główny aparat obsługujący HDR
  • Tryb wykrywania twarzy

Ogólne

  • Nakładki sprzętowe
  • Wyświetlacz HDR

Klasa skuteczności kampanii w mediach 33

MPC 33 zostało wprowadzone w Androidzie 13 i opiera się na wymaganiach wprowadzonych w MPC 31. Wymagania MPC 33 są publikowane w dokumentacji CDD Androida 13. Oprócz zwiększonych wymagań dotyczących elementów z MPC 31 dokument CDD określa wymagania w tych obszarach:

Multimedia

  • dekoder sprzętowy AV1,
  • Bezpieczne dekodery sprzętowe
  • Opóźnienie inicjalizacji dekodera
  • Opóźnienie dźwięku w obie strony
  • Słuchawki przewodowe i urządzenia audio USB
  • Urządzenia MIDI
  • Zaufane środowisko wykonawcze obsługiwane przez sprzęt

Aparat

  • Stabilizacja podglądu
  • Nagrywanie w zwolnionym tempie
  • Minimalny współczynnik powiększenia w przypadku ultraszerokokątnych aparatów
  • Jednoczestnie używana kamera
  • Logiczna wielokamera
  • Przypadek użycia strumieniowego

Klasa Media Performance 31

MPC 31 zostało wprowadzone w Androidzie 12. Wymagania dotyczące MPC 31 są opublikowane w dokumentacji CDD Androida 12. Dokument CDD określa wymagania w tych obszarach:

Multimedia

  • Równoczesne sesje kodeka wideo
  • Opóźnienie inicjalizacji kodera
  • Pominięte klatki dekodera
  • Jakość kodowania

Aparat

  • Rozdzielczość i liczba klatek
  • Czasy uruchamiania i przechwytywania
  • FULLlub wyższy poziom sprzętowy
  • Źródło sygnatury czasowej to „Czas rzeczywisty”
  • Funkcja RAW

Ogólne

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

Klasa skuteczności mediów 30

MPC 30 zawiera podzbiór wymagań MPC 31, co pozwala deweloperom na dostosowanie aplikacji na starszych, ale nadal bardzo wydajnych urządzeniach. Wymagania dotyczące konkretnej klasy wydajności są publikowane w dokumentacji CDD Androida 11.