Thay đổi về hành vi: tất cả ứng dụng

Nền tảng Android 14 có các thay đổi về hành vi có thể ảnh hưởng đến ứng dụng của bạn. Những thay đổi về hành vi sau đây áp dụng cho tất cả ứng dụng khi chạy trên Android 14, bất kể targetSdkVersion. Bạn nên kiểm thử ứng dụng rồi sửa đổi để hỗ trợ những thay đổi này cho phù hợp (nếu cần).

Ngoài ra, hãy nhớ tham khảo danh sách thay đổi về hành vi chỉ ảnh hưởng đến những ứng dụng nhắm đến Android 14.

Chức năng cốt lõi

Theo mặc định, tính năng lên lịch chuông báo chính xác bị từ chối

Chuông báo chính xác là tính năng dành cho các thông báo mà người dùng có ý định thực hiện, hoặc hành động cần thực hiện tại một thời điểm chính xác. Kể từ Android 14, quyền SCHEDULE_EXACT_ALARM sẽ không còn được cấp trước cho những ứng dụng mới cài đặt nhắm đến Android 13 trở lên (quyền này bị từ chối theo mặc định).

Tìm hiểu thêm về những thay đổi đối với quyền lên lịch chuông báo chính xác.

Tin truyền đã đăng ký theo bối cảnh được đưa vào hàng đợi trong khi ứng dụng được lưu vào bộ nhớ đệm

Trên Android 14, hệ thống có thể đặt thông báo truyền tin đã đăng ký theo bối cảnh vào hàng đợi trong khi ứng dụng đang ở trạng thái được lưu vào bộ nhớ đệm. Điều này tương tự như hành vi xếp hàng mà Android 12 (API cấp 31) đã ra mắt cho các giao dịch liên kết không đồng bộ. Các tin truyền do tệp kê khai khai báo sẽ không được đưa vào hàng đợi và ứng dụng sẽ bị xoá khỏi trạng thái đã lưu vào bộ nhớ đệm để phân phối tin truyền.

Khi ứng dụng thoát khỏi trạng thái đã lưu vào bộ nhớ đệm (ví dụ: quay lại nền trước) hệ thống sẽ phân phối mọi tin truyền đã xếp hàng đợi. Có thể hợp nhất nhiều thực thể của một số tin truyền nhất định thành một tin truyền. Tuỳ thuộc vào các yếu tố khác, chẳng hạn như hệ thống sức khoẻ, ứng dụng có thể bị xoá khỏi trạng thái đã lưu vào bộ nhớ đệm và mọi trạng thái đã được đưa vào danh sách chờ trước đó tin nhắn truyền phát sẽ được phân phối.

Ứng dụng chỉ có thể loại bỏ các quy trình của riêng mình ở chế độ nền

Kể từ Android 14, khi ứng dụng của bạn gọi killBackgroundProcesses(), API này chỉ có thể loại bỏ các quy trình của ứng dụng đó ở chế độ nền.

Nếu bạn truyền tên gói của một ứng dụng khác vào, phương thức này sẽ không ảnh hưởng đến các quy trình trong nền của ứng dụng đó và thông báo sau sẽ xuất hiện trong Logcat:

Invalid packageName: com.example.anotherapp

Ứng dụng của bạn không nên sử dụng API killBackgroundProcesses(), hoặc tìm cách tác động đến vòng đời xử lý của các ứng dụng khác, ngay cả trên các phiên bản hệ điều hành cũ hơn. Android được thiết kế để tiếp tục lưu các ứng dụng vào bộ nhớ đệm trong nền, và tự động loại bỏ chúng khi hệ thống cần bộ nhớ. Nếu ứng dụng của bạn dừng các ứng dụng khác một cách không cần thiết, thì hiệu suất hệ thống có thể bị giảm và mức tiêu thụ pin sẽ tăng khi yêu cầu khởi động lại hoàn toàn các ứng dụng đó sau đó. Quá trình này sẽ tốn nhiều tài nguyên hơn đáng kể so với việc tiếp tục một ứng dụng hiện có đã lưu vào bộ nhớ đệm.

MTU được đặt thành 517 cho ứng dụng khách GATT đầu tiên yêu cầu MTU

Starting from Android 14, the Android Bluetooth stack more strictly adheres to Version 5.2 of the Bluetooth Core Specification and requests the BLE ATT MTU to 517 bytes when the first GATT client requests an MTU using the BluetoothGatt#requestMtu(int) API, and disregards all subsequent MTU requests on that ACL connection.

To address this change and make your app more robust, consider the following options:

  • Your peripheral device should respond to the Android device's MTU request with a reasonable value that can be accommodated by the peripheral. The final negotiated value will be a minimum of the Android requested value and the remote provided value (for example, min(517, remoteMtu))
    • Implementing this fix could require a firmware update for peripheral
  • Alternatively, limit your GATT characteristic writes based on the minimum between the known supported value of your peripheral and the received MTU change
    • A reminder that you should reduce 5 bytes from the supported size for the headers
    • For example: arrayMaxLength = min(SUPPORTED_MTU, GATT_MAX_ATTR_LEN(517)) - 5

Lý do mới khiến một ứng dụng có thể được đặt vào bộ chứa chế độ chờ bị hạn chế

Android 14 giới thiệu một lý do mới khiến ứng dụng có thể được đưa vào nhóm chế độ chờ bị hạn chế. Các công việc của ứng dụng kích hoạt lỗi ANR nhiều lần do hết thời gian chờ phương thức onStartJob, onStopJob hoặc onBind. (Xem phần JobScheduler củng cố hành vi gọi lại và mạng để biết các thay đổi đối với onStartJobonStopJob.)

Để theo dõi xem ứng dụng có vào bộ chứa chế độ chờ bị hạn chế hay không, bạn nên ghi nhật ký bằng API UsageStatsManager.getAppStandbyBucket() khi thực thi công việc hoặc UsageStatsManager.queryEventsForSelf() khi khởi động ứng dụng.

mlock giới hạn ở 64 KB

Trong Android 14 (API cấp 34) trở lên, nền tảng này giảm dung lượng bộ nhớ tối đa có thể khoá bằng mlock() xuống còn 64 KB cho mỗi quy trình. Trong các phiên bản trước, giới hạn là 64 MB cho mỗi quy trình. Quy tắc hạn chế này giúp quản lý bộ nhớ hiệu quả hơn trên các ứng dụng và hệ thống. Để mang lại tính nhất quán hơn trên các thiết bị, Android 14 thêm một quy trình kiểm thử CTS mới cho giới hạn mlock() mới trên các thiết bị tương thích.

Hệ thống thực thi mức sử dụng tài nguyên của ứng dụng được lưu vào bộ nhớ đệm

By design, an app's process is in a cached state when it's moved to the background and no other app process components are running. Such an app process is subject to being killed due to system memory pressure. Any work that Activity instances perform after the onStop() method has been called and returned, while in this state, is unreliable and strongly discouraged.

Android 14 introduces consistency and enforcement to this design. Shortly after an app process enters a cached state, background work is disallowed, until a process component re-enters an active state of the lifecycle.

Apps that use typical framework-supported lifecycle APIs – such as services, JobScheduler, and Jetpack WorkManager – shouldn't be impacted by these changes.

Trải nghiệm người dùng

Thay đổi về trải nghiệm người dùng đối với thông báo không đóng được

If your app shows non-dismissable foreground notifications to users, Android 14 has changed the behavior to allow users to dismiss such notifications.

This change applies to apps that prevent users from dismissing foreground notifications by setting Notification.FLAG_ONGOING_EVENT through Notification.Builder#setOngoing(true) or NotificationCompat.Builder#setOngoing(true). The behavior of FLAG_ONGOING_EVENT has changed to make such notifications actually dismissable by the user.

These kinds of notifications are still non-dismissable in the following conditions:

  • When the phone is locked
  • If the user selects a Clear all notification action (which helps with accidental dismissals)

Also, this new behavior doesn't apply to notifications in the following use cases:

  • CallStyle notifications
  • Device policy controller (DPC) and supporting packages for enterprise
  • Media notifications
  • The default Search Selector package

Thông tin an toàn dữ liệu được trình bày rõ ràng hơn

To enhance user privacy, Android 14 increases the number of places where the system shows the information you have declared in the Play Console form. Currently, users can view this information in the Data safety section on your app's listing in Google Play.

We encourage you to review your app's location data sharing policies and take a moment to make any applicable updates to your app's Google Play Data safety section.

Learn more in the guide about how data safety information is more visible on Android 14.

Hỗ trợ tiếp cận

Điều chỉnh tỷ lệ phông chữ phi tuyến tính lên đến 200%

Kể từ Android 14, hệ thống sẽ hỗ trợ việc chuyển tỷ lệ phông chữ lên đến 200%, mang đến cho người dùng thêm một số chế độ hỗ trợ tiếp cận.

Nếu bạn đã sử dụng đơn vị pixel được điều chỉnh theo tỷ lệ (sp) để xác định kích thước văn bản, thì thay đổi này có thể sẽ không gây ảnh hưởng lớn đến ứng dụng của bạn. Tuy nhiên, bạn nên kiểm thử giao diện người dùng với kích thước phông chữ tối đa được bật (200%) để đảm bảo ứng dụng có thể đáp ứng kích thước phông chữ lớn hơn mà không ảnh hưởng đến khả năng hữu dụng.

Bảo mật

Cấp API mục tiêu tối thiểu có thể cài đặt

Starting with Android 14, apps with a targetSdkVersion lower than 23 can't be installed. Requiring apps to meet these minimum target API level requirements improves security and privacy for users.

Malware often targets older API levels in order to bypass security and privacy protections that have been introduced in newer Android versions. For example, some malware apps use a targetSdkVersion of 22 to avoid being subjected to the runtime permission model introduced in 2015 by Android 6.0 Marshmallow (API level 23). This Android 14 change makes it harder for malware to avoid security and privacy improvements. Attempting to install an app targeting a lower API level will result in an installation failure, with the following message appearing in Logcat:

INSTALL_FAILED_DEPRECATED_SDK_VERSION: App package must target at least SDK version 23, but found 7

On devices upgrading to Android 14, any apps with a targetSdkVersion lower than 23 will remain installed.

If you need to test an app targeting an older API level, use the following ADB command:

adb install --bypass-low-target-sdk-block FILENAME.apk

Tên gói của chủ sở hữu nội dung đa phương tiện có thể bị loại bỏ

The media store supports queries for the OWNER_PACKAGE_NAME column, which indicates the app that stored a particular media file. Starting in Android 14, this value is redacted unless at least one of the following conditions is true:

  • The app that stored the media file has a package name that is always visible to other apps.
  • The app that queries the media store requests the QUERY_ALL_PACKAGES permission.

Learn more about how Android filters package visibility for privacy purposes.