Android 16 平台包含可能對應用程式造成影響的行為變更。無論 targetSdkVersion
為何,當應用程式在 Android 16 上執行時,下列行為變更將會套用至所有應用程式。您應測試應用程式,並視需要修改,以便在適當情況下支援這些變更。
另請務必查看僅對指定 Android 16 為目標版本的應用程式造成影響的行為變更清單。
核心功能
Android 16 包含下列變更,可修改或擴充 Android 系統的各種核心功能。
JobScheduler 配額最佳化
Starting in Android 16, we're adjusting regular and expedited job execution runtime quota based on the following factors:
- Which app standby bucket the application is in: in Android 16, active standby buckets will start being enforced by a generous runtime quota.
- If the job starts execution while the app is in a top state: in Android 16, Jobs started while the app is visible to the user and continues after the app becomes invisible, will adhere to the job runtime quota.
- If the job is executing while running a Foreground Service: in Android 16, jobs that are executing while concurrently with a foreground service will adhere to the job runtime quota. If you're leveraging jobs for user initiated data transfer, consider using user initiated data transfer jobs instead.
This change impacts tasks scheduled using WorkManager, JobScheduler, and
DownloadManager. To debug why a job was stopped, we recommend logging why your
job was stopped by calling WorkInfo.getStopReason()
(for
JobScheduler jobs, call JobParameters.getStopReason()
).
For more information on battery-optimal best practices, refer to guidance on optimize battery use for task scheduling APIs.
We also recommend leveraging the new
JobScheduler#getPendingJobReasonsHistory
API introduced in
Android 16 to understand why a job has not executed.
Testing
To test your app's behavior, you can enable override of certain job quota optimizations as long as the app is running on an Android 16 device.
To disable enforcement of "top state will adhere to job runtime quota", run the
following adb
command:
adb shell am compat enable OVERRIDE_QUOTA_ENFORCEMENT_TO_TOP_STARTED_JOBS APP_PACKAGE_NAME
To disable enforcement of "jobs that are executing while concurrently with a
foreground service will adhere to the job runtime quota", run the following
adb
command:
adb shell am compat enable OVERRIDE_QUOTA_ENFORCEMENT_TO_FGS_JOBS APP_PACKAGE_NAME
To test certain app standby bucket behavior, you can set the app standby bucket
of your app using the following adb
command:
adb shell am set-standby-bucket APP_PACKAGE_NAME active|working_set|frequent|rare|restricted
To understand the app standby bucket your app is in, you can get the app standby
bucket of your app using the following adb
command:
adb shell am get-standby-bucket APP_PACKAGE_NAME
完全淘汰 JobInfo#setImportantWhileForeground
JobInfo.Builder#setImportantWhileForeground(boolean)
方法會在排程應用程式處於前景或暫時豁免背景限制時,指出工作的重要性。
自 Android 12 (API 級別 31) 起,此方法已淘汰。自 Android 16 起,這項方法不再有效,系統會忽略呼叫此方法的行為。
這項功能移除作業也適用於 JobInfo#isImportantWhileForeground()
。自 Android 16 起,如果呼叫該方法,該方法會傳回 false
。
排序廣播優先順序的範圍不再是全域
Android 應用程式可定義廣播接收器的優先順序,藉此控制接收器接收及處理廣播的順序。對於資訊清單宣告的接收器,應用程式可以使用 android:priority
屬性來定義優先順序,而對於內容註冊的接收器,應用程式可以使用 IntentFilter#setPriority()
API 來定義優先順序。傳送廣播訊息時,系統會依優先順序 (由高至低) 將訊息傳送給接收器。
在 Android 16 中,系統無法保證使用 android:priority
屬性或在不同程序中使用 IntentFilter#setPriority()
的廣播傳送順序。廣播優先順序只會在相同的應用程式程序中受到尊重,而不會跨所有程序。
此外,廣播優先順序會自動限制在 (SYSTEM_LOW_PRIORITY
+ 1, SYSTEM_HIGH_PRIORITY
- 1) 的範圍內。只有系統元件可將 SYSTEM_LOW_PRIORITY
、SYSTEM_HIGH_PRIORITY
設為廣播優先順序。
如果您的應用程式執行下列任一操作,可能會受到影響:
- 您的應用程式已宣告多個使用相同廣播意圖的程序,並且預期會按照優先順序接收這些意圖。
- 您的應用程式程序會與其他程序互動,並預期以特定順序接收廣播意圖。
如果程序需要相互協調,則應使用其他協調管道進行通訊。
ART 內部變更
Android 16 includes the latest updates to the Android Runtime (ART) that improve the Android Runtime's (ART's) performance and provide support for additional Java features. Through Google Play System updates, these improvements are also available to over a billion devices running Android 12 (API level 31) and higher.
As these changes are released, libraries and app code that rely on internal structures of ART might not work correctly on devices running Android 16, along with earlier Android versions that update the ART module through Google Play system updates.
Relying on internal structures (such as non-SDK interfaces) can always lead to compatibility problems, but it's particularly important to avoid relying on code (or libraries containing code) that leverages internal ART structures, since ART changes aren't tied to the platform version the device is running on and they go out to over a billion devices through Google Play system updates.
All developers should check whether their app is impacted by testing their apps thoroughly on Android 16. In addition, check the known issues to see if your app depends on any libraries that we've identified that rely on internal ART structures. If you do have app code or library dependencies that are affected, seek public API alternatives whenever possible and request public APIs for new use cases by creating a feature request in our issue tracker.
使用者體驗和系統使用者介面
Android 16 包含下列變更,旨在打造更一致、直覺的使用者體驗。
淘汰干擾性無障礙工具的公告
Android 16 deprecates accessibility announcements, characterized by the use of
announceForAccessibility
or the dispatch of
TYPE_ANNOUNCEMENT
accessibility events. These can create
inconsistent user experiences for users of TalkBack and Android's screen reader,
and alternatives better serve a broader range of user needs across a variety of
Android's assistive technologies.
Examples of alternatives:
- For significant UI changes like window changes, use
Activity.setTitle(CharSequence)
andsetAccessibilityPaneTitle(java.lang.CharSequence)
. In Compose, useModifier.semantics { paneTitle = "paneTitle" }
- To inform the user of changes to critical UI, use
setAccessibilityLiveRegion(int)
. In Compose, useModifier.semantics { liveRegion = LiveRegionMode.[Polite|Assertive]}
. These should be used sparingly as they may generate announcements every time a View is updated. - To notify users about errors, send an
AccessibilityEvent
of typeAccessibilityEvent#CONTENT_CHANGE_TYPE_ERROR
and setAccessibilityNodeInfo#setError(CharSequence)
, or useTextView#setError(CharSequence)
.
The reference documentation for the deprecated
announceForAccessibility
API includes more details about
suggested alternatives.
支援 3 按鈕操作
Android 16 為已正確遷移至預測返回功能的應用程式,提供 3 鍵導覽的預測返回功能支援。長按返回按鈕會啟動預測返回動畫,讓您預覽返回滑動手勢會帶您前往的位置。
這項行為適用於系統中所有支援預測返回動畫的區域,包括系統動畫 (返回首頁、跨工作和跨活動)。