Thay đổi về hành vi: Ứng dụng nhắm đến Android 16 trở lên

Giống như các bản phát hành trước, Android 16 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 chỉ áp dụng cho ứng dụng nhắm đến Android 16 trở lên. Nếu ứng dụng của bạn nhắm đến Android 16 trở lên, bạn nên điều chỉnh ứng dụng để hỗ trợ những hành vi này (nếu cần).

Ngoài ra, hãy nhớ tham khảo danh sách thay đổi về hành vi ảnh hưởng đến tất cả ứng dụng chạy trên Android 16 bất kể targetSdkVersion của ứng dụng.

Trải nghiệm người dùng và giao diện người dùng hệ thống

Android 16 có các thay đổi sau đây nhằm tạo ra trải nghiệm người dùng nhất quán và trực quan hơn.

Xoá chế độ chọn không hiển thị tràn viền

Android 15 đã thực thi chế độ tràn viền cho các ứng dụng nhắm đến Android 15 (API cấp 35), nhưng ứng dụng của bạn có thể chọn không sử dụng bằng cách đặt R.attr#windowOptOutEdgeToEdgeEnforcement thành true. Đối với các ứng dụng nhắm đến Android 16, R.attr#windowOptOutEdgeToEdgeEnforcement không còn được dùng nữa và bị vô hiệu hoá, đồng thời ứng dụng của bạn không thể chọn không sử dụng chế độ tràn viền.

Để kiểm thử trong Android 16 Beta 2, hãy đảm bảo ứng dụng của bạn hỗ trợ tràn viền và xoá mọi hoạt động sử dụng R.attr#windowOptOutEdgeToEdgeEnforcement. Để hỗ trợ chế độ tràn viền, hãy xem hướng dẫn về ComposeKhung hiển thị. Hãy cho chúng tôi biết về những vấn đề bạn gặp phải trong công cụ theo dõi lỗi trên trang phản hồi.

Bạn phải di chuyển hoặc chọn không sử dụng tính năng xem trước thao tác quay lại

Đối với các ứng dụng nhắm đến Android 16 trở lên và chạy trên thiết bị Android 16 trở lên, ảnh động hệ thống xem trước thao tác quay lại (quay lại trang chủ, giữa các tác vụ và giữa các hoạt động) được bật theo mặc định. Ngoài ra, onBackPressed không được gọi và KeyEvent.KEYCODE_BACK không được gửi nữa.

Nếu ứng dụng của bạn chặn sự kiện quay lại và bạn chưa di chuyển sang tính năng xem trước thao tác quay lại, hãy cập nhật ứng dụng để sử dụng các API điều hướng quay lại được hỗ trợ. Hoặc tạm thời chọn không sử dụng bằng cách đặt thuộc tính android:enableOnBackInvokedCallback thành false trong thẻ <application> hoặc <activity> của tệp AndroidManifest.xml của ứng dụng.

Ảnh động xem trước thao tác quay lại màn hình chính.
Ảnh động dự đoán trên nhiều hoạt động.
Ảnh động dự đoán nhiều tác vụ.

Ngừng sử dụng và vô hiệu hoá API phông chữ thanh lịch

Các ứng dụng nhắm đến Android 15 (API cấp 35) có thuộc tính elegantTextHeight TextView được đặt thành true theo mặc định, thay thế phông chữ thu gọn bằng phông chữ dễ đọc hơn nhiều. Bạn có thể ghi đè hành vi này bằng cách đặt thuộc tính elegantTextHeight thành false.

Android 16 không dùng thuộc tính elegantTextHeight nữa và thuộc tính này sẽ bị bỏ qua khi ứng dụng của bạn nhắm đến Android 16. "Phông chữ giao diện người dùng" do các API này kiểm soát sẽ ngừng hoạt động, vì vậy, bạn nên điều chỉnh mọi bố cục để đảm bảo việc hiển thị văn bản nhất quán và phù hợp với tương lai bằng tiếng Ả Rập, tiếng Lào, tiếng Myanmar, tiếng Tamil, tiếng Gujarati, tiếng Kannada, tiếng Malayalam, tiếng Odia, tiếng Telugu hoặc tiếng Thái.

elegantTextHeight hành vi cho các ứng dụng nhắm đến Android 14 (API cấp 34) trở xuống hoặc cho các ứng dụng nhắm đến Android 15 (API cấp 35) đã ghi đè hành vi mặc định bằng cách đặt thuộc tính elegantTextHeight thành false.
elegantTextHeight hành vi cho các ứng dụng nhắm đến Android 16 hoặc cho các ứng dụng nhắm đến Android 15 (API cấp 35) không ghi đè mặc định bằng cách đặt thuộc tính elegantTextHeight thành false.

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

Android 16 bao gồm các thay đổi sau đây để sửa đổi hoặc mở rộng nhiều chức năng cốt lõi của hệ thống Android.

Tối ưu hoá việc lên lịch công việc theo tỷ lệ cố định

Trước khi nhắm đến Android 16, khi scheduleAtFixedRate bỏ lỡ một lần thực thi tác vụ do nằm ngoài vòng đời quy trình hợp lệ, tất cả các lần thực thi bị bỏ lỡ sẽ thực thi ngay khi ứng dụng quay lại một vòng đời hợp lệ.

Khi nhắm đến Android 16, tối đa một lần thực thi bị bỏ lỡ của scheduleAtFixedRate sẽ được thực thi ngay lập tức khi ứng dụng quay lại một vòng đời hợp lệ. Thay đổi về hành vi này dự kiến sẽ cải thiện hiệu suất của ứng dụng. Kiểm thử hành vi này trong ứng dụng để xem ứng dụng của bạn có bị ảnh hưởng hay không. Bạn cũng có thể kiểm thử bằng cách sử dụng khung tương thích của ứng dụng và bật cờ tương thích STPE_SKIP_MULTIPLE_MISSED_PERIODIC_TASKS.

Kiểu dáng thiết bị

Android 16 có những thay đổi sau đây đối với ứng dụng khi hiển thị trên thiết bị màn hình lớn.

Bố cục thích ứng (Adaptive Layouts)

Hiện tại, các ứng dụng Android chạy trên nhiều thiết bị (chẳng hạn như điện thoại, máy tính bảng, thiết bị có thể gập lại, máy tính, ô tô và TV) và các chế độ cửa sổ trên màn hình lớn (chẳng hạn như màn hình chia đôi và cửa sổ máy tính), nên nhà phát triển nên xây dựng ứng dụng Android thích ứng với mọi kích thước màn hình và cửa sổ, bất kể hướng thiết bị. Các mô hình như hạn chế hướng và khả năng đổi kích thước quá hạn chế trong thế giới đa thiết bị ngày nay.

Bỏ qua các quy định hạn chế về hướng, khả năng đổi kích thước và tỷ lệ khung hình

Đối với các ứng dụng nhắm đến Android 16, Android 16 có các thay đổi về cách hệ thống quản lý các hạn chế về hướng, khả năng đổi kích thước và tỷ lệ khung hình. Trên màn hình có chiều rộng nhỏ nhất >= 600 dp, các quy định hạn chế này sẽ không còn áp dụng nữa. Ứng dụng cũng lấp đầy toàn bộ cửa sổ hiển thị, bất kể tỷ lệ khung hình hoặc hướng ưu tiên của người dùng, và không sử dụng khung hòm thư.

Thay đổi này sẽ giới thiệu một hành vi mới theo tiêu chuẩn của nền tảng. Android đang chuyển sang một mô hình trong đó các ứng dụng dự kiến sẽ thích ứng với nhiều hướng, kích thước màn hình và tỷ lệ khung hình. Các hạn chế như hướng cố định hoặc khả năng đổi kích thước bị hạn chế sẽ cản trở khả năng thích ứng của ứng dụng. Vì vậy, bạn nên tạo ứng dụng thích ứng để mang lại trải nghiệm người dùng tốt nhất có thể.

Bạn cũng có thể kiểm thử hành vi này bằng cách sử dụng [khung tương thích của ứng dụng][a16-kilo-14] và bật cờ tương thích UNIVERSAL_RESIZABLE_BY_DEFAULT.

Các thay đổi có thể gây lỗi thường gặp

Việc bỏ qua các quy tắc hạn chế về hướng, khả năng đổi kích thước và tỷ lệ khung hình có thể ảnh hưởng đến giao diện người dùng của ứng dụng trên một số thiết bị, đặc biệt là các thành phần được thiết kế cho bố cục nhỏ bị khoá ở hướng dọc: ví dụ: các vấn đề như bố cục bị kéo giãn, ảnh động và thành phần ngoài màn hình. Mọi giả định về tỷ lệ khung hình hoặc hướng đều có thể gây ra vấn đề về hình ảnh cho ứng dụng. Hãy tìm hiểu thêm về cách tránh các vấn đề này và cải thiện hành vi thích ứng của ứng dụng.

Việc cho phép xoay thiết bị sẽ dẫn đến việc tạo lại nhiều hoạt động hơn, điều này có thể dẫn đến việc mất trạng thái người dùng nếu không được lưu giữ đúng cách. Tìm hiểu cách lưu chính xác trạng thái giao diện người dùng trong bài viết Lưu trạng thái giao diện người dùng.

Thông tin chi tiết về cách triển khai

Các thuộc tính tệp kê khai và API thời gian chạy sau đây sẽ bị bỏ qua trên các thiết bị màn hình lớn ở chế độ toàn màn hình và nhiều cửa sổ:

Các giá trị sau đây cho screenOrientation, setRequestedOrientation()getRequestedOrientation() sẽ bị bỏ qua:

  • portrait
  • reversePortrait
  • sensorPortrait
  • userPortrait
  • landscape
  • reverseLandscape
  • sensorLandscape
  • userLandscape

Đối với khả năng đổi kích thước màn hình, android:resizeableActivity="false", android:minAspectRatioandroid:maxAspectRatio không có tác dụng.

Đối với các ứng dụng nhắm đến Android 16, theo mặc định, các quy tắc hạn chế về hướng, khả năng đổi kích thước và tỷ lệ khung hình của ứng dụng sẽ bị bỏ qua trên màn hình lớn, nhưng mọi ứng dụng chưa sẵn sàng hoàn toàn có thể tạm thời ghi đè hành vi này bằng cách chọn không sử dụng (khiến hành vi trước đó là được đặt ở chế độ tương thích).

Ngoại lệ

Các hạn chế về hướng, khả năng đổi kích thước và tỷ lệ khung hình của Android 16 không áp dụng trong các trường hợp sau:

  • Trò chơi (dựa trên cờ android:appCategory)
  • Người dùng chọn rõ ràng hành vi mặc định của ứng dụng trong phần cài đặt tỷ lệ khung hình của thiết bị
  • Màn hình nhỏ hơn sw600dp

Tạm thời chọn không tham gia

Để chọn không sử dụng một hoạt động cụ thể, hãy khai báo thuộc tính tệp kê khai PROPERTY_COMPAT_ALLOW_RESTRICTED_RESIZABILITY:

<activity ...>
  <property android:name="android.window.PROPERTY_COMPAT_ALLOW_RESTRICTED_RESIZABILITY" android:value="true" />
  ...
</activity>

Nếu quá nhiều phần của ứng dụng chưa sẵn sàng cho Android 16, bạn có thể chọn không sử dụng hoàn toàn bằng cách áp dụng cùng một thuộc tính ở cấp ứng dụng:

<application ...>
  <property android:name="android.window.PROPERTY_COMPAT_ALLOW_RESTRICTED_RESIZABILITY" android:value="true" />
</application>

Sức khoẻ và thể chất

Android 16 có các thay đổi sau đây liên quan đến dữ liệu sức khoẻ và thể chất.

Quyền đối với dữ liệu về sức khoẻ và thể dục

Đối với các ứng dụng nhắm đến Android 16 trở lên, quyền BODY_SENSORS đang chuyển sang các quyền chi tiết trong android.permissions.health cũng được Health Connect sử dụng. Bất kỳ API nào trước đây yêu cầu BODY_SENSORS hoặc BODY_SENSORS_BACKGROUND hiện đều yêu cầu quyền android.permissions.health tương ứng. Điều này ảnh hưởng đến các loại dữ liệu, API và loại dịch vụ trên nền trước sau đây:

Nếu sử dụng các API này, ứng dụng của bạn hiện sẽ yêu cầu các quyền chi tiết tương ứng:

Các quyền này giống với các quyền bảo vệ quyền truy cập để đọc dữ liệu từ Health Connect, kho dữ liệu Android dành cho dữ liệu sức khoẻ, thể chất và chăm sóc sức khoẻ tinh thần.