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.
Ritiro del consenso per la visualizzazione edge-to-edge
Android 15 ha imposto il formato edge-to-edge per le app destinate ad Android 15 (livello API 35), ma la tua app potrebbe disattivarlo impostando R.attr#windowOptOutEdgeToEdgeEnforcement
su true
. Per le app che hanno come target Android 16, R.attr#windowOptOutEdgeToEdgeEnforcement
è deprecato e disattivato e la tua app non può disattivare la visualizzazione a schermo intero.
Per i test in Android 16 Beta 2, assicurati che la tua app supporti il formato edge-to-edge erimuovi qualsiasi utilizzo di R.attr#windowOptOutEdgeToEdgeEnforcement
. Per supportare la visualizzazione edge-to-edge, consulta le indicazioni su Composizione e Visualizzazioni. Facci sapere i problemi riscontrati nel nostro issue tracker nella pagina dei feedback.
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 passaggio 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.
API dei caratteri eleganti ritirate e disattivate
Per le app che hanno come target Android 15 (livello API 35), l'attributo
elegantTextHeight
TextView
è impostato su true
per default, sostituendo il carattere compatto con uno molto più leggibile. Puoi eseguire l'override impostando l'attributo elegantTextHeight
su false
.
Android 16 ritira l'attributo
elegantTextHeight
,
che verrà ignorato quando la tua app avrà come target Android 16. I " caratteri UI" controllati da queste API non saranno più disponibili, pertanto devi adattare i layout per garantire un rendering del testo coerente e adatto al futuro in arabo, lao, birmano, tamil, gujarati, kannada, malayalam, oriya, telugu o thai.
![](https://developer.android.google.cn/static/about/versions/15/images/elegant-text-height-before.png?authuser=0&hl=it)
elegantTextHeight
per le app che hanno come target Android 14 (livello API 34) e versioni precedenti o per le app che hanno come target Android 15 (livello API 35)
che ha sostituito il valore predefinito impostando l'attributo elegantTextHeight
su false
.![](https://developer.android.google.cn/static/about/versions/15/images/elegant-text-height-after.png?authuser=0&hl=it)
elegantTextHeight
per le app che hanno come target Android
16 o per le app che hanno come target Android 15 (livello API 35) che non hanno override il valore predefinito impostando l'attributo elegantTextHeight
su
false
.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 a 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
.
Fattori di forma del dispositivo
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, pieghevoli, computer, auto e TV) e modalità di visualizzazione su schermi di grandi dimensioni (come schermo diviso e visualizzazione in finestra 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 possibilità di ridimensionamento sono troppo restrittivi nel mondo di oggi, in cui sono presenti più dispositivi.
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 formato. 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 dei display 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.
Puoi anche testare questo comportamento utilizzando il
[framework di compatibilità delle app][a16-kilo-14] e attivando il flag di compatibilità UNIVERSAL_RESIZABLE_BY_DEFAULT
.
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 ridotti 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 di 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:
screenOrientation
resizableActivity
minAspectRatio
maxAspectRatio
setRequestedOrientation()
getRequestedOrientation()
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 che hanno come target Android 16, le limitazioni relative a orientamento, ridimensionamento e proporzioni delle app vengono ignorate sugli schermi grandi per impostazione predefinita, ma ogni app non completamente pronta può ignorare temporaneamente questo comportamento disattivandolo (il che comporta il comportamento precedente di essere inserita in modalità di compatibilità).
Eccezioni
Le limitazioni relative a orientamento, ridimensionamento e proporzioni di 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:
HEART_RATE_BPM
da Wear Health ServicesSensor.TYPE_HEART_RATE
da Android Sensor ManagerheartRateAccuracy
eheartRateBpm
da WearProtoLayout
FOREGROUND_SERVICE_TYPE_HEALTH
se al posto diBODY_SENSORS
è necessaria la rispettiva autorizzazioneandroid.permission.health
Se la tua app utilizza queste API, ora dovrebbe richiedere le rispettive autorizzazioni granulari:
- Per il monitoraggio in uso di battito cardiaco, SpO2 o temperatura cutanea:
richiedi l'autorizzazione granulare in
android.permissions.health
, ad esempioREAD_HEART_RATE
anzichéBODY_SENSORS
. - Per l'accesso al sensore in background: richiedi
READ_HEALTH_DATA_IN_BACKGROUND
anzichéBODY_SENSORS_BACKGROUND
.
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.