Cambiamenti del comportamento: tutte le app

La piattaforma Android 16 include modifiche al comportamento che potrebbero influire sulla tua app. Le seguenti modifiche al comportamento si applicano a tutte le app quando vengono eseguite su Android 16, indipendentemente da targetSdkVersion. Devi testare l'app e poi modificarla come necessario per supportare queste modifiche, se applicabili.

Assicurati di esaminare anche l'elenco delle modifiche al comportamento che interessano solo le app con target Android 16.

Funzionalità di base

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

Ottimizzazioni delle quote di JobScheduler

A partire da Android 16, stiamo modificando la quota di tempo di esecuzione per l'esecuzione di job regolari e accelerati in base ai seguenti fattori:

  • Il bucket di app in standby in cui si trova l'applicazione: in Android 16, i bucket di app in standby attivi inizieranno a essere applicati da una quota di runtime generosa.
  • Se il job inizia l'esecuzione mentre l'app è in uno stato superiore: in Android 16, i job avviati mentre l'app è visibile all'utente e continuano dopo che l'app diventa invisibile, rispetteranno la quota di tempo di esecuzione del job.
  • Se il job è in esecuzione durante l'esecuzione di un servizio in primo piano: in Android 16, i job in esecuzione contemporaneamente a un servizio in primo piano rispetteranno la quota di tempo di esecuzione del job. Se utilizzi i job per il trasferimento di dati avviato dall'utente, ti consigliamo di utilizzare i job di trasferimento di dati avviati dall'utente.

Questa modifica interessa le attività pianificate utilizzando WorkManager, JobScheduler e DownloadManager. Per eseguire il debug del motivo dell'interruzione di un job, ti consigliamo di registrare il motivo dell'interruzione chiamando WorkInfo.getStopReason() (per i job JobScheduler, chiama JobParameters.getStopReason()).

Per ulteriori informazioni sulle best practice per l'ottimizzazione dell'utilizzo della batteria per le API di pianificazione delle attività, consulta le indicazioni su come ottimizzare l'utilizzo della batteria per le API di pianificazione delle attività.

Ti consigliamo inoltre di utilizzare la nuova API JobScheduler#getPendingJobReasonsHistory introdotta in Android 16 per capire perché un job non è stato eseguito.

Test

Per testare il comportamento dell'app, puoi attivare l'override di determinate ottimizzazioni della quota di job, a condizione che l'app sia in esecuzione su un dispositivo Android 16.

Per disattivare l'applicazione dell'impostazione "lo stato superiore rispetterà la quota di runtime del job", esegui il seguente comando adb:

adb shell am compat enable OVERRIDE_QUOTA_ENFORCEMENT_TO_TOP_STARTED_JOBS APP_PACKAGE_NAME

Per disattivare l'applicazione forzata del criterio "i job in esecuzione contemporaneamente a un servizio in primo piano rispetteranno la quota di tempo di esecuzione del job", esegui il seguente comando adb:

adb shell am compat enable OVERRIDE_QUOTA_ENFORCEMENT_TO_FGS_JOBS APP_PACKAGE_NAME

Per testare determinati comportamenti del bucket in standby dell'app, puoi impostare il bucket in standby dell'app utilizzando il seguente comando adb:

adb shell am set-standby-bucket APP_PACKAGE_NAME active|working_set|frequent|rare|restricted

Per capire il bucket in cui si trova la tua app, puoi ottenere il bucket in standby della tua app utilizzando il seguente comando adb:

adb shell am get-standby-bucket APP_PACKAGE_NAME

Ritiro completo di JobInfo#setImportantWhileForeground

Il metodo JobInfo.Builder#setImportantWhileForeground(boolean) indica l'importanza di un job quando l'app di pianificazione è in primo piano o quando è temporaneamente esente dalle limitazioni in background.

Questo metodo è stato ritirato da Android 12 (livello API 31). A partire da Android 16, non funziona più in modo efficace e la chiamata di questo metodo verrà ignorata.

Questa rimozione di funzionalità si applica anche a JobInfo#isImportantWhileForeground(). A partire da Android 16, se il metodo viene chiamato, restituisce false.

Esperienza utente e interfaccia utente di sistema

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

Ritiro degli annunci di accessibilità che causano interruzioni

Android 16 ritira gli annunci di accessibilità, caratterizzati dall'utilizzo di announceForAccessibility o dall'invio di TYPE_ANNOUNCEMENT eventi di accessibilità. Ciò può creare esperienze utente incoerenti per gli utenti di TalkBack e dello screen reader di Android e le alternative soddisfano meglio una gamma più ampia di esigenze degli utenti in una serie di tecnologie per la disabilità di Android.

Esempi di alternative:

La documentazione di riferimento per l'API announceForAccessibility obsoleta include ulteriori dettagli sulle alternative suggerite.