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

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

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 13.

Hiệu suất và pin

Trình quản lý tác vụ

Ở cuối ngăn thông báo là một nút cho biết
  số lượng ứng dụng hiện đang chạy ở chế độ nền. Khi bạn nhấn
  nút này, một hộp thoại sẽ xuất hiện liệt kê tên của các ứng dụng khác nhau. Chiến lược phát hành đĩa đơn
  Nút Dừng ở bên phải mỗi ứng dụng
Hình 1. Quy trình làm việc cho Trình quản lý tác vụ , cho phép người dùng dừng những ứng dụng có dịch vụ đang chạy trên nền trước. Quy trình công việc này chỉ xuất hiện trên các thiết bị chạy Android 13 trở lên.

Kể từ Android 13 (API cấp 33), người dùng có thể hoàn tất quy trình công việc từ ngăn thông báo để dừng những ứng dụng có các dịch vụ đang chạy trên nền trước, như minh hoạ trong hình 1. Thành phần tương tác này được gọi là Task Manager (Trình quản lý tác vụ). Ứng dụng phải có khả năng xử lý vấn đề này do người dùng thực hiện dừng.

Cải thiện quá trình xử lý công việc tìm nạp trước bằng JobScheduler

JobScheduler cung cấp một cách để ứng dụng đánh dấu các công việc cụ thể là "tìm nạp trước" công việc (sử dụng JobInfo.Builder.setPrefetch()), có nghĩa là lý tưởng nhất là gần và trước lần khởi chạy ứng dụng tiếp theo nhằm cải thiện trải nghiệm người dùng. Trước đây, JobScheduler chỉ sử dụng tín hiệu này để cho phép tìm nạp trước các công việc có thể sử dụng dữ liệu thừa hoặc miễn phí.

Trong Android 13 (API cấp 33) trở lên, hệ thống sẽ cố gắng xác định thời điểm tiếp theo mà một ứng dụng sẽ được khởi chạy, đồng thời sử dụng ước tính đó để chạy công việc tìm nạp trước. Ứng dụng nên cố gắng sử dụng các công việc tìm nạp trước cho mọi công việc mà ứng dụng muốn cần làm trước lần khởi chạy ứng dụng tiếp theo.

Sử dụng tài nguyên pin

Android 13 (API cấp 33) cung cấp các cách sau để hệ thống cải thiện quản lý thời lượng pin của thiết bị:

Khi bạn kiểm thử ứng dụng bằng những thay đổi này, hãy nhớ kiểm tra những yếu tố sau những điều sau:

  • Kiểm thử cách ứng dụng phản hồi khi hệ thống đặt ứng dụng trong phần "bị hạn chế" Chiến dịch Quảng cáo ứng dụng Bộ chứa chế độ chờ. Sử dụng sau đây là lệnh Cầu gỡ lỗi Android (ADB) để chỉ định ứng dụng của bạn vào bộ chứa này:

    adb shell am set-standby-bucket PACKAGE_NAME restricted
    
  • Kiểm thử cách ứng dụng của bạn phản hồi các hạn chế thường áp dụng sau đây với các ứng dụng "bị hạn chế" trạng thái về mức sử dụng pin trong nền:

    • Không thể khởi chạy dịch vụ trên nền trước
    • Các dịch vụ trên nền trước hiện có sẽ bị xoá khỏi nền trước
    • Chuông báo không được kích hoạt
    • Công việc không được thực thi

    Sử dụng lệnh ADB sau đây để đặt ứng dụng của bạn vào trạng thái "bị hạn chế" này trạng thái:

    adb shell cmd appops set PACKAGE_NAME RUN_ANY_IN_BACKGROUND ignore
    

Hạn mức thông báo qua đám mây của Firebase (FCM) có mức độ ưu tiên cao

Android 13 (API cấp 33) cập nhật các hạn mức đối với Giải pháp gửi thông báo qua đám mây của Firebase (FCM) để cải thiện độ tin cậy của quá trình phân phối FCM có mức độ ưu tiên cao cho những ứng dụng hiện thông báo phản hồi FCM có mức độ ưu tiên cao. Các tính năng sau đã thay đổi trong Android 13 (API cấp 33):

  • Nhóm chế độ chờ ứng dụng không còn xác định số lượng FCM có mức độ ưu tiên cao mà một ứng dụng có thể sử dụng.
  • Hạn mức FCM có mức độ ưu tiên cao sẽ điều chỉnh theo tỷ lệ tương ứng với số lượng thông báo hiển thị cho người dùng tương ứng với FCM có mức độ ưu tiên cao.

Như trong các phiên bản Android trước đây, FCM có mức độ ưu tiên cao vượt quá hạn mức sẽ bị hạ cấp xuống mức độ ưu tiên bình thường. Khi bắt đầu Dịch vụ trên nền trước (FGS) để phản hồi FCM, bạn nên kiểm tra kết quả của RemoteMessage.getPriority() và xác nhận kết quả đó là PRIORITY_HIGH và/hoặc xử lý mọi trường hợp ngoại lệ có thể xảy ra ForegroundServiceStartNotAllowedException.

Nếu ứng dụng của bạn không phải lúc nào cũng đăng thông báo phản hồi FCM có mức độ ưu tiên cao thì bạn nên thay đổi mức độ ưu tiên của các FCM này thành bình thường để các thông báo dẫn đến thông báo không bị hạ cấp.

Quyền riêng tư

Quyền khi bắt đầu chạy đối với thông báo

Android 13 (API cấp 33) ra mắt một môi trường thời gian chạy quyền gửi thông báo: POST_NOTIFICATIONS. Thay đổi này giúp người dùng tập trung vào các thông báo quan trọng nhất với họ.

Bạn nên nhắm đến Android 13 trở lên càng sớm càng tốt hiệu quả nhất có thể để có được quyền kiểm soát bổ sung và sự linh hoạt của tính năng này.

Tìm hiểu thêm về các phương pháp hay nhất về quyền cho ứng dụng.

Ẩn nội dung nhạy cảm khỏi bảng nhớ tạm

Nếu ứng dụng của bạn cho phép người dùng sao chép nội dung nhạy cảm, chẳng hạn như mật khẩu hoặc tín dụng vào bảng nhớ tạm, bạn phải thêm cờ vào bảng nhớ tạm ClipDescription trước khi gọi ClipboardManager#setPrimaryClip(). Đang thêm cờ này ngăn nội dung nhạy cảm xuất hiện trong bản xem trước nội dung.

Bản xem trước văn bản sao chép không gắn cờ nội dung nhạy cảm
Bản xem trước văn bản sao chép mà không gắn cờ nội dung nhạy cảm.
Bản xem trước văn bản sao chép có gắn cờ nội dung nhạy cảm.
Bản xem trước văn bản sao chép có gắn cờ nội dung nhạy cảm.

Để gắn cờ nội dung nhạy cảm, hãy thêm một boolean bổ sung vào ClipDescription. Tất cả thì các ứng dụng sẽ thực hiện việc này, bất kể cấp độ API được nhắm đến.


// When your app is compiled with the API level 33 SDK or higher
clipData.apply {
    description.extras = PersistableBundle().apply {
        putBoolean(ClipDescription.EXTRA_IS_SENSITIVE, true)
    }
}

// If your app is compiled with a lower SDK
clipData.apply {
    description.extras = PersistableBundle().apply {
        putBoolean("android.content.extra.IS_SENSITIVE", true)
    }
}

Để tìm hiểu thêm về giao diện bảng nhớ tạm mới, hãy truy cập vào Trang tính năng Sao chép và dán.

Bảo mật

Di chuyển khỏi mã nhận dạng người dùng chung

Nếu ứng dụng của bạn sử dụng phiên bản Thuộc tính android:sharedUserId và không còn phụ thuộc vào chức năng của thuộc tính, bạn có thể đặt thuộc tính android:sharedUserMaxSdkVersion cho 32, như được thể hiện trong đoạn mã sau:

<manifest ...>
    <!-- To maintain backward compatibility, continue to use
         "android:sharedUserId" if you already added it to your manifest. -->
    android:sharedUserId="SHARED_PACKAGE_NAME"
    android:sharedUserMaxSdkVersion="32"
    ...
</manifest>

Thuộc tính này cho hệ thống biết rằng ứng dụng của bạn không còn dựa vào mã nhận dạng người dùng. Nếu ứng dụng của bạn khai báo android:sharedUserMaxSdkVersion và mới trên thiết bị chạy Android 13 trở lên, ứng dụng của bạn sẽ hoạt động như thể bạn chưa từng xác định android:sharedUserId. Các ứng dụng đã cập nhật vẫn sử dụng mã nhận dạng người dùng chung hiện có.

Mã nhận dạng người dùng chung gây ra hành vi không xác định trong trình quản lý gói. Thay vào đó, ứng dụng của bạn nên dùng cơ chế giao tiếp phù hợp, chẳng hạn như các dịch vụ và trình cung cấp nội dung, nhằm hỗ trợ khả năng tương tác giữa các thành phần dùng chung.

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

Thông báo về dịch vụ trên nền trước có thể loại bỏ

Trên các thiết bị chạy Android 13 trở lên, người dùng có thể đóng thông báo liên kết với nền trước các dịch vụ của mặc định.

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

Đã xoá bản sao cũ của quá trình triển khai dịch vụ lời nói

Android 13 xoá phương thức triển khai SpeechService, bao gồm cả IME giọng nói, RecognitionService và chiến dịch dựa trên ý định API — từ ứng dụng Google.

Trong Android 12, có các thay đổi sau:

  • SpeechService chức năng đã được di chuyển sang Dịch vụ lời nói bằng cách Điều khoản ứng dụng, Đây là nhà cung cấp SpeechService mặc định.
  • Chức năng RecognitionService đã được chuyển sang Hệ thống Android Ứng dụng Thông minh hỗ trợ tính năng nhận dạng lời nói trên thiết bị.

Để giúp duy trì khả năng tương thích của ứng dụng trên Android 12, ứng dụng Google dùng một thành phần phản hồi để chuyển hướng lưu lượng truy cập đến ứng dụng Dịch vụ lời nói của Google. Trong Trên Android 13, thành phần phản hồi với thao tác nhấn vào đây sẽ bị loại bỏ.

Ứng dụng nên sử dụng nhà cung cấp mặc định của thiết bị cho SpeechService, thay vì mã cứng một ứng dụng cụ thể.