Classe di rendimento

La classe di prestazioni è uno standard introdotto per la prima volta in Android 12. Una classe di prestazioni definisce un insieme di funzionalità del dispositivo che vanno oltre i requisiti di base di Android.

A ogni versione di Android corrisponde la classe di prestazioni corrispondente, definita nel Android Compatibility Definition Document (CDD) di tale versione. La Android Compatibility Test Suite (CTS) verifica i requisiti per i CDV.

Ogni dispositivo Android dichiara la classe di prestazioni che supporta. Gli sviluppatori possono trovare la classe di prestazioni del dispositivo in fase di runtime e fornire esperienze di upgrade che sfruttano al meglio le funzionalità del dispositivo.

Per trovare il livello di classe prestazioni di un dispositivo, utilizza la libreria Core Performance di Jetpack. Questa libreria segnala la classe di prestazioni multimediali del dispositivo come dichiarata nelle informazioni sulla versione della build o in base ai dati di Google Play Services.

Inizia aggiungendo una dipendenza per i moduli pertinenti nel file 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")

Trendy

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

Puoi quindi recuperare la proprietà mediaPerformanceClass per personalizzare l'esperienza della tua app in base alle funzionalità del dispositivo:

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

Le classi di prestazioni sono compatibili con le versioni future. Un dispositivo può eseguire l'upgrade a una versione della piattaforma più recente senza aggiornare la classe di rendimento. Ad esempio, un dispositivo che supporta inizialmente la classe di prestazioni 12 può eseguire l'upgrade ad Android 13 e continuare a indicare che supporta la classe 12 se non soddisfa i requisiti della classe 13. Ciò significa che una classe di prestazioni consente di raggruppare i dispositivi senza fare affidamento su una determinata versione di Android.

Figura 1. I dispositivi possono eseguire l'upgrade delle versioni di Android e continuare a segnalare che supportano la classe supportata in origine.

Classe di rendimento 14

La classe di prestazioni 14 si basa sui requisiti introdotti nella classe di prestazioni 13. I requisiti specifici della classe di prestazioni sono pubblicati nel CDD Android. Oltre a requisiti più elevati per gli articoli della classe di prestazioni 13, il CDV specifica i requisiti nelle seguenti aree:

Contenuti multimediali

  • Supporto dell'effetto grana della pellicola nei decodificatori hardware AV1
  • Profilo AVIF di riferimento
  • Prestazioni del codificatore AV1
  • Codec video HDR
  • Formato colore RGBA_1010102
  • Campionamento texture YUV
  • Qualità di codifica video
  • Mixing audio multicanale

Fotocamera

  • Estensione modalità notturna
  • Fotocamera principale con funzionalità HDR
  • Modalità scena rilevamento dei volti

Generico

  • Overlay hardware
  • Display HDR

Classe di rendimento 13

La classe di prestazioni 13 si basa sui requisiti introdotti nella classe di prestazioni 12. I requisiti specifici della classe di prestazioni sono pubblicati nel CDD Android. Oltre a requisiti più elevati per gli articoli della classe di prestazioni 12, il CDV specifica i requisiti nelle seguenti aree:

Contenuti multimediali

  • Decodificatore hardware AV1
  • Proteggi i decodificatori hardware
  • Latenza di inizializzazione decoder
  • Latenza audio di andata e ritorno
  • Auricolari con cavo e dispositivi audio USB
  • Dispositivi MIDI
  • Ambiente di esecuzione affidabile basato sull'hardware

Fotocamera

  • Stabilizzazione in anteprima
  • Registrazione in slow-mo
  • Rapporto di zoom minimo per le fotocamere ultrawide
  • Fotocamera simultanea
  • Multicamera logica
  • Caso d'uso dei flussi

Classe di rendimento 12

La classe 12 del rendimento è incentrata sui casi d'uso dei media. I requisiti specifici della classe di prestazioni sono pubblicati nel CDD Android. Il CDD specifica i requisiti nelle seguenti aree:

Contenuti multimediali

  • Sessioni con codec video in contemporanea
  • Latenza di inizializzazione del codificatore
  • Cadute dei frame del decodificatore
  • Qualità di codifica

Fotocamera

  • Risoluzione e frequenza fotogrammi
  • Latenze di avvio e acquisizione
  • FULL o migliore a livello di hardware
  • L'origine del timestamp è in tempo reale
  • Funzionalità RAW

Generico

  • Memoria
  • Prestazioni di lettura e scrittura
  • Risoluzione dello schermo
  • Densità schermo

Classe di rendimento 11

La classe di prestazioni 11 include un sottoinsieme dei requisiti per la classe di prestazioni 12, consentendo agli sviluppatori di offrire un'esperienza personalizzata su dispositivi precedenti ma ancora altamente performanti. I requisiti specifici della classe di prestazioni sono pubblicati nel CDD Android.