La plataforma de Android 16 incluye cambios de comportamiento que podrían afectar a tu app. Los siguientes cambios se aplican a todas las apps cuando se ejecutan en Android 16, independientemente de targetSdkVersion
. Debes probar tu app y, luego, modificarla según corresponda para admitir estos cambios.
Asegúrate también de revisar la lista de cambios de comportamiento que solo afectan a las apps orientadas a Android 16.
Funcionalidad principal
Android 16 incluye los siguientes cambios que modifican o expanden varias funciones principales del sistema Android.
Optimizaciones de cuotas de JobScheduler
从 Android 16 开始,我们将根据以下因素调整常规作业和加急作业执行运行时配额:
- 应用位于哪个应用待机分桶:在 Android 16 中,系统将开始使用充足的运行时配额来强制执行处于活动状态的待机分桶。
- 如果作业在应用处于顶部状态时开始执行:在 Android 16 中,如果作业在应用对用户可见时启动,并在应用变为不可见后继续执行,则将遵循作业运行时配额。
- 如果作业在运行前台服务时执行:在 Android 16 中,与前台服务同时执行的作业将遵循作业运行时配额。如果您要使用作业进行用户发起的数据传输,请考虑改用用户发起的数据传输作业。
此更改会影响使用 WorkManager、JobScheduler 和 DownloadManager 调度的任务。如需调试作业停止的原因,我们建议您通过调用 WorkInfo.getStopReason()
来记录作业停止的原因(对于 JobScheduler 作业,请调用 JobParameters.getStopReason()
)。
如需详细了解有关延长电池续航时间的最佳实践,请参阅有关优化任务调度 API 的电池用量的指南。
我们还建议您利用 Android 16 中引入的新 JobScheduler#getPendingJobReasonsHistory
API 来了解作业未执行的原因。
测试
如需测试应用的行为,您可以启用替换特定作业配额优化,前提是应用在 Android 16 设备上运行。
如需停用强制执行“顶部状态将遵守作业运行时配额”政策,请运行以下 adb
命令:
adb shell am compat enable OVERRIDE_QUOTA_ENFORCEMENT_TO_TOP_STARTED_JOBS APP_PACKAGE_NAME
如需停用强制执行“与前台服务同时执行的作业将遵守作业运行时配额”政策,请运行以下 adb
命令:
adb shell am compat enable OVERRIDE_QUOTA_ENFORCEMENT_TO_FGS_JOBS APP_PACKAGE_NAME
如需测试特定的应用待机分桶行为,您可以使用以下 adb
命令设置应用的应用待机分桶:
adb shell am set-standby-bucket APP_PACKAGE_NAME active|working_set|frequent|rare|restricted
如需了解应用所在的应用待机分桶,您可以使用以下 adb
命令获取应用的应用待机分桶:
adb shell am get-standby-bucket APP_PACKAGE_NAME
Se dejó de usar por completo JobInfo#setImportantWhileForeground.
El método JobInfo.Builder#setImportantWhileForeground(boolean)
indica la importancia de una tarea mientras la app de programación está en primer plano o cuando está exenta temporalmente de las restricciones en segundo plano.
Este método dejó de estar disponible a partir de Android 12 (nivel de API 31). A partir de Android 16, ya no funciona de manera eficaz y se ignorará llamar a este método.
Esta eliminación de funcionalidad también se aplica a JobInfo#isImportantWhileForeground()
. A partir de Android 16, si se llama al método, este muestra false
.
Experiencia del usuario y IU del sistema
Android 16 incluye los siguientes cambios, que tienen como objetivo crear una experiencia del usuario más intuitiva y coherente.
Se darán de baja los anuncios de accesibilidad disruptivos
Android 16 da de baja los anuncios de accesibilidad, que se caracterizan por el uso de announceForAccessibility
o el envío de eventos de accesibilidad TYPE_ANNOUNCEMENT
. Esto puede crear experiencias del usuario incoherentes para los usuarios de TalkBack y el lector de pantalla de Android, y las alternativas satisfacen mejor una gama más amplia de necesidades de los usuarios en una variedad de tecnologías de accesibilidad de Android.
Ejemplos de alternativas:
- Para cambios significativos en la IU, como cambios de ventana, usa
Activity.setTitle(CharSequence)
ysetAccessibilityPaneTitle(java.lang.CharSequence)
. En Compose, usaModifier.semantics { paneTitle = "paneTitle" }
. - Para informar al usuario sobre los cambios en la IU crítica, usa
setAccessibilityLiveRegion(int)
. En Compose, usaModifier.semantics { liveRegion = LiveRegionMode.[Polite|Assertive]}
. Se deben usar con moderación, ya que pueden generar anuncios cada vez que se actualiza una vista. - Para notificar a los usuarios sobre errores, envía un
AccessibilityEvent
de tipoAccessibilityEvent#CONTENT_CHANGE_TYPE_ERROR
y estableceAccessibilityNodeInfo#setError(CharSequence)
, o usaTextView#setError(CharSequence)
.
La documentación de referencia de la API de announceForAccessibility
, que dejó de estar disponible, incluye más detalles sobre las alternativas sugeridas.