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