Modifiche al comportamento: app che hanno come target Android 16 o versioni successive

Come le release precedenti, Android 16 include modifiche al comportamento che potrebbero influire sulla tua app. Le seguenti modifiche al comportamento si applicano esclusivamente alle app destinate ad Android 16 o versioni successive. Se la tua app ha come target Android 16 o versioni successive, devi modificarla in modo da supportare questi comportamenti, ove applicabili.

Assicurati di esaminare anche l'elenco delle modifiche al comportamento che interessano tutte le app in esecuzione su Android 16, indipendentemente dal targetSdkVersion della tua app.

Esperienza utente e interfaccia utente di sistema

Android 16 include le seguenti modifiche volte a creare un'esperienza utente più coerente e intuitiva.

Migrazione o disattivazione richiesta per il ritorno predittivo

Per le app destinate ad Android 16 o versioni successive ed eseguite su un dispositivo con Android 16 o versioni successive, le animazioni di sistema per il tasto Indietro predittive (tasto Indietro, passaggio da un'attività all'altra e da un'attività all'altra e ritorno) sono attivate per impostazione predefinita. Inoltre, onBackPressed non viene chiamato e KeyEvent.KEYCODE_BACK non viene più inviato.

Se la tua app intercetta l'evento Indietro e non hai ancora eseguito la migrazione al pulsante Indietro predittivo, aggiorna l'app in modo da utilizzare le API di navigazione a ritroso supportate oppure disattiva temporaneamente l'opzione impostando l'attributo android:enableOnBackInvokedCallback su false nel tag <application> o <activity> del file AndroidManifest.xml dell'app.

L'animazione predittiva per tornare alla home page.
L'animazione predittiva tra attività.
L'animazione predittiva tra attività.

Funzionalità di base

Android 16 include le seguenti modifiche che modificano o ampliano varie funzionalità di base del sistema Android.

Ottimizzazione della pianificazione del lavoro con tariffa fissa

Prima di scegliere come target Android 16, quando scheduleAtFixedRate mancava un'esecuzione di attività perché non rientrava in un ciclo di vita del processo valido, tutte le esecuzioni mancate venivano eseguite immediatamente quando l'app tornava a un ciclo di vita valido.

Quando scegli come target Android 16, al massimo una esecuzione mancata di scheduleAtFixedRate viene eseguita immediatamente quando l'app torna a un ciclo di vita valido. Questa modifica del comportamento dovrebbe migliorare il rendimento dell'app. Testa questo comportamento nella tua app per verificare se è interessata. Puoi anche eseguire il test utilizzando il framework di compatibilità delle app e attivando il flag di compatibilità STPE_SKIP_MULTIPLE_MISSED_PERIODIC_TASKS.

Schermi e fattori di forma di grandi dimensioni

Android 16 include le seguenti modifiche per le app quando vengono visualizzate su dispositivi con schermi di grandi dimensioni.

Layout adattivi

Ora che le app per Android vengono eseguite su una serie di dispositivi (come smartphone, tablet, dispositivi pieghevoli e computer) e modalità di visualizzazione su schermi di grandi dimensioni (come lo schermo diviso e la visualizzazione su computer), gli sviluppatori devono creare app per Android che si adattino a qualsiasi dimensione dello schermo e della finestra, indipendentemente dall'orientamento del dispositivo. Paradigmi come la limitazione dell'orientamento e la modifica delle dimensioni sono troppo restrittivi nel mondo multidispositivo di oggi.

Ignora le limitazioni relative a orientamento, ridimensionamento e proporzioni

Per le app che hanno come target Android 16, Android 16 include modifiche al modo in cui il sistema gestisce le limitazioni di orientamento, ridimensionamento e proporzioni. Sui display con larghezza minima >= 600 dp, le limitazioni non si applicano più. Inoltre, le app riempiono l'intera finestra di visualizzazione, indipendentemente dalle proporzioni o dall'orientamento preferito dall'utente, e non viene utilizzato il pillarboxing.

Questa modifica introduce un nuovo comportamento standard della piattaforma. Android si sta muovendo verso un modello in cui le app devono adattarsi a vari orientamenti, dimensioni dello schermo e proporzioni. Restrizioni come l'orientamento fisso o il ridimensionamento limitato ostacolano l'adattabilità dell'app, pertanto ti consigliamo di rendere l'app adattabile per offrire la migliore esperienza utente possibile.

Modifiche che provocano un errore comuni

Se ignori le limitazioni relative all'orientamento, alla modifica delle dimensioni e alle proporzioni, l'interfaccia utente della tua app potrebbe essere interessata su alcuni dispositivi, in particolare gli elementi progettati per layout piccoli bloccati in orientamento verticale: ad esempio, problemi come layout allungati, animazioni e componenti off-screen. Qualsiasi supposizione sull'aspetto o sull'orientamento può causare problemi visivi con la tua app. Scopri di più su come evitarli e migliorare il comportamento adattativo della tua app.

Se consenti la rotazione del dispositivo, le attività vengono ricreate più spesso, il che può comportare la perdita dello stato dell'utente se non viene conservato correttamente. Scopri come salvare correttamente lo stato dell'interfaccia utente in Salvare gli stati dell'interfaccia utente.

Dettagli sull'implementazione

I seguenti attributi manifest e API di runtime vengono ignorati sui dispositivi con schermo di grandi dimensioni nelle modalità a schermo intero e con più finestre:

I seguenti valori per screenOrientation, setRequestedOrientation() e getRequestedOrientation() vengono ignorati:

  • portrait
  • reversePortrait
  • sensorPortrait
  • userPortrait
  • landscape
  • reverseLandscape
  • sensorLandscape
  • userLandscape

Per quanto riguarda la modifica delle dimensioni del display, android:resizeableActivity="false", android:minAspectRatio e android:maxAspectRatio non hanno alcun effetto.

Per le app destinate ad Android 16, le limitazioni relative a orientamento, ridimensionamento e proporzioni delle app vengono ignorate sugli schermi di grandi dimensioni per impostazione predefinita, ma ogni app non completamente pronta può ignorare temporaneamente questo comportamento disattivandolo (il che comporta il comportamento precedente di inserimento in modalità di compatibilità).

Eccezioni

Le limitazioni relative a ridimensionamento, orientamento e proporzioni per Android 16 non si applicano nelle seguenti situazioni:

  • Giochi (in base al flag android:appCategory)
  • Utenti che attivano esplicitamente il comportamento predefinito dell'app nelle impostazioni delle proporzioni del dispositivo
  • Schermi di dimensioni inferiori a sw600dp

Disattivare temporaneamente

Per disattivare un'attività specifica, dichiara la proprietà manifestPROPERTY_COMPAT_ALLOW_RESTRICTED_RESIZABILITY:

<activity ...>
  <property android:name="android.window.PROPERTY_COMPAT_ALLOW_RESTRICTED_RESIZABILITY" android:value="true" />
  ...
</activity>

Se troppe parti della tua app non sono pronte per Android 16, puoi disattivare completamente la funzionalità applicando la stessa proprietà a livello di applicazione:

<application ...>
  <property android:name="android.window.PROPERTY_COMPAT_ALLOW_RESTRICTED_RESIZABILITY" android:value="true" />
</application>

Salute e fitness

Android 16 include le seguenti modifiche relative ai dati su salute e fitness.

Autorizzazioni per salute e fitness

Per le app destinate ad Android 16 o versioni successive, le autorizzazioni BODY_SENSORS stanno passando alle autorizzazioni granulari in android.permissions.health utilizzate anche da Connessione Salute. Qualsiasi API che in precedenza richiedeva BODY_SENSORS o BODY_SENSORS_BACKGROUND ora richiede l'autorizzazione corrispondente android.permissions.health. Questo influisce sui seguenti tipi di dati, API e tipi di servizi in primo piano:

Se la tua app utilizza queste API, ora dovrebbe richiedere le rispettive autorizzazioni granulari:

Queste autorizzazioni sono le stesse che proteggono l'accesso alla lettura dei dati da Connessione Salute, il data store Android per i dati relativi a salute, attività fisica e benessere.