Bộ chứa chế độ chờ ứng dụng

Android 9 (API cấp 28) trở lên hỗ trợ Bộ chứa chế độ chờ ứng dụng. Bộ chứa chế độ chờ ứng dụng giúp hệ thống ưu tiên các yêu cầu của ứng dụng về tài nguyên, dựa trên mức độ gần đây và tần suất dùng ứng dụng. Dựa trên mẫu sử dụng ứng dụng, mỗi ứng dụng sẽ được đưa vào 1 trong 5 bộ chứa ưu tiên. Hệ thống sẽ giới hạn các tài nguyên thiết bị có sẵn cho mỗi ứng dụng dựa trên bộ chứa chứa ứng dụng đó.

Bộ chứa ưu tiên

Hệ thống sẽ linh hoạt chỉ định từng ứng dụng cho một bộ chứa ưu tiên, rồi chỉ định lại các ứng dụng đó khi cần. Hệ thống này có thể triển khai một ứng dụng tải trước dùng công nghệ học máy để xác định khả năng mỗi ứng dụng được dùng và chỉ định ứng dụng cho bộ chứa thích hợp.

Nếu không có ứng dụng hệ thống trên thiết bị, thì theo mặc định, hệ thống sẽ sắp xếp ứng dụng dựa trên thời điểm sử dụng gần đây. Các ứng dụng hoạt động nhiều hơn được chỉ định cho những bộ chứa ưu tiên ứng dụng hơn, giúp ứng dụng dùng được nhiều tài nguyên hệ thống hơn. Cụ thể, bộ chứa này sẽ xác định tần suất chạy công việc của ứng dụng và tần suất ứng dụng có thể kích hoạt chuông báo. Những hạn chế này chỉ áp dụng khi thiết bị đang chạy bằng pin. Hệ thống không áp dụng các hạn chế này đối với ứng dụng trong khi thiết bị đang sạc.

Có các bộ chứa ưu tiên như sau:

  • Đang hoạt động: ứng dụng đang được dùng hoặc đã được dùng gần đây.
  • Nhóm hoạt động: ứng dụng được dùng thường xuyên.
  • Thường xuyên: ứng dụng được dùng thường xuyên nhưng không phải hằng ngày.
  • Hiếm: ứng dụng không được dùng thường xuyên.
  • Bị hạn chế: ứng dụng tiêu tốn nhiều tài nguyên hệ thống hoặc có thể có hành vi không mong muốn.

Ngoài các bộ chứa ưu tiên này, có một bộ chứa đặc biệt không bao giờ dành cho các ứng dụng đã cài đặt nhưng chưa chạy. Hệ thống áp dụng các quy định hạn chế nghiêm ngặt đối với những ứng dụng này.

Phần mô tả bên dưới là dành cho trường hợp không dự đoán được. Ngược lại, khi công cụ dự đoán sử dụng công nghệ học máy để dự đoán hành vi, bộ chứa sẽ được chọn để dự đoán hành động tiếp theo của người dùng chứ không phải dựa trên hoạt động sử dụng gần đây. Ví dụ: một ứng dụng bạn dùng gần đây có thể được đưa vào bộ chứa hiếm, vì công nghệ học máy dự đoán có thể bạn không dùng ứng dụng đó trong vài giờ.

Đang hoạt động

Một ứng dụng nằm trong bộ chứa đang hoạt động nếu ứng dụng này đang được sử dụng, sử dụng gần đây hoặc thực hiện bất kỳ thao tác nào sau đây:

  • Khởi chạy một hoạt động.
  • Chạy dịch vụ trên nền trước hoạt động trong thời gian dài.
  • Được người dùng nhấn vào trong một thông báo.

Nếu một ứng dụng nằm trong bộ chứa đang hoạt động, hệ thống sẽ không đặt ra bất kỳ hạn chế nào đối với các công việc hoặc chuông báo của ứng dụng đó.

Khi người dùng tương tác, ứng dụng sẽ được đặt vào bộ chứa đang hoạt động

Trên Android 9 (API cấp 28) trở lên, khi người dùng tương tác với ứng dụng của bạn theo những cách nhất định, hệ thống sẽ tạm thời đặt ứng dụng đó vào bộ chứa đang hoạt động. Sau khi người dùng ngừng tương tác với ứng dụng, hệ thống sẽ đặt ứng dụng đó vào một bộ chứa dựa trên nhật ký sử dụng.

Sau đây là ví dụ về các hoạt động tương tác kích hoạt hành vi hệ thống này:

  • Người dùng nhấn vào thông báo do ứng dụng gửi.

  • Người dùng tương tác với dịch vụ trên nền trước trong ứng dụng bằng cách nhấn vào nút nội dung đa phương tiện.

  • Người dùng vừa kết nối với ứng dụng vừa tương tác với Android Automotive OS, khi đó ứng dụng dùng dịch vụ trên nền trước hoặc CONNECTION_TYPE_PROJECTION.

Nhóm hoạt động

Một ứng dụng sẽ nằm trong bộ chứa nhóm hoạt động nếu ứng dụng đó chạy thường xuyên nhưng không hoạt động. Ví dụ: một ứng dụng mạng xã hội mà người dùng chạy hầu như mọi ngày có khả năng nằm trong nhóm hoạt động. Các ứng dụng cũng được thăng cấp vào bộ chứa nhóm hoạt động nếu chúng được sử dụng gián tiếp.

Nếu một ứng dụng ở trong nhóm hoạt động, hệ thống sẽ đặt ra các hạn chế nhỏ về khả năng chạy các công việc và kích hoạt chuông báo. Để biết thông tin chi tiết, vui lòng xem phần Hạn chế quản lý nguồn.

Thường xuyên

Một ứng dụng nằm trong bộ chứa thường xuyên nếu được sử dụng thường xuyên, nhưng không nhất thiết phải mỗi ngày. Ví dụ: một ứng dụng theo dõi bài tập thể dục mà người dùng chạy tại phòng tập thể dục có thể nằm trong bộ chứa thường xuyên.

Nếu một ứng dụng nằm trong bộ chứa thường xuyên, thì hệ thống sẽ áp dụng các hạn chế nghiêm ngặt hơn đối với khả năng chạy các công việc và kích hoạt chuông báo. Để biết thông tin chi tiết, vui lòng xem phần Hạn chế quản lý nguồn.

Hiếm

Một ứng dụng nằm trong bộ chứa hiếm nếu ứng dụng không được sử dụng thường xuyên. Ví dụ: một ứng dụng khách sạn mà người dùng chỉ chạy trong khi ở tại khách sạn đó có thể nằm trong bộ chứa hiếm.

Nếu một ứng dụng nằm trong bộ chứa hiếm, thì hệ thống sẽ áp dụng các hạn chế nghiêm ngặt đối với khả năng chạy các công việc và kích hoạt chuông báo. Hệ thống cũng giới hạn khả năng kết nối Internet của ứng dụng. Để biết thông tin chi tiết, vui lòng xem phần Hạn chế quản lý nguồn.

Bị hạn chế

Bộ chứa này được thêm vào Android 12 (API cấp 31), có mức độ ưu tiên thấp nhất và các hạn chế cao nhất trong tất cả các bộ chứa. Hệ thống sẽ xem xét hành vi của ứng dụng, chẳng hạn như tần suất người dùng tương tác với ứng dụng, để quyết định xem có đặt ứng dụng đó vào bộ chứa bị hạn chế hay không.

Trên Android 13 (API cấp 33) trở lên, trừ phi ứng dụng đủ điều kiện được miễn, hệ thống sẽ đặt ứng dụng vào bộ chứa bị hạn chế trong những trường hợp sau đây:

  • Người dùng không tương tác với ứng dụng của bạn trong một số ngày cụ thể. Trên Android 12 (API cấp 31) và 12L (API cấp 32), số ngày là 45. Trên Android 13, con số đó giảm xuống còn 8 ngày.

  • Ứng dụng gọi quá nhiều thông báo truyền tin hoặc liên kết trong vòng 24 giờ.

Nếu hệ thống đặt ứng dụng vào bộ chứa bị hạn chế, thì các hạn chế sau đây sẽ áp dụng:

  • Bạn có thể chạy công việc mỗi ngày một lần, trong một phiên hoạt động kéo dài 10 phút. Trong phiên này, hệ thống nhóm các công việc trong ứng dụng của bạn với các công việc của ứng dụng khác.
    • Các công việc bị hạn chế không có khả năng tự chạy. Phải có ít nhất một công việc khác đang chạy/đang chờ xử lý cùng lúc, có thể bao gồm bất kỳ công việc nào khác.
  • Ứng dụng của bạn có thể chạy ít công việc ưu tiên hơn, so với khi hệ thống đặt ứng dụng của bạn vào một bộ chứa ít hạn chế hơn.
  • Ứng dụng của bạn có thể gọi một chuông báo mỗi ngày. Chuông báo này có thể là chuông báo chính xác hoặc chuông báo không chính xác.

Miễn khỏi bộ chứa bị hạn chế

Sau đây là những loại ứng dụng được miễn khỏi bộ chứa "bị hạn chế" và bỏ qua trình kích hoạt không hoạt động, ngay cả trên Android 12 trở lên:

Đánh giá bộ chứa ưu tiên

Để kiểm tra xem ứng dụng của bạn được đặt vào bộ chứa nào, hãy làm theo một trong những cách sau đây:

  • Gọi getAppStandbyBucket().

  • Chạy lệnh sau đây trong một cửa sổ dòng lệnh khác:

    adb shell am get-standby-bucket PACKAGE_NAME

Hệ thống sẽ điều tiết ứng dụng của bạn mỗi khi ứng dụng đó được đưa vào bộ chứa Chế độ chờ ứng dụng có giá trị lớn hơn STANDBY_BUCKET_ACTIVE (10).

Các phương pháp hay nhất

Nếu ứng dụng của bạn đang áp dụng các phương pháp hay nhất cho chế độ Nghỉ và chế độ chờ ứng dụng, thì việc xử lý các tính năng quản lý nguồn sau này sẽ không hề khó khăn. Tuy nhiên, một số hành vi ứng dụng từng hoạt động tốt giờ có thể gây ra sự cố.

  • Đừng cố gắng thao túng hệ thống để đưa ứng dụng của bạn vào một bộ chứa nào đó. Phương thức đặt mức độ ưu tiên của hệ thống có thể thay đổi và mọi nhà sản xuất thiết bị có thể chọn viết ứng dụng phân bộ chứa bằng thuật toán riêng. Thay vào đó, hãy đảm bảo ứng dụng của bạn hoạt động theo cách phù hợp dù thuộc bộ chứa nào.
  • Nếu một ứng dụng không có hoạt động trong trình chạy, thì ứng dụng đó có thể không bao giờ được nâng cấp lên bộ chứa đang hoạt động. Hãy cân nhắc việc thiết kế lại để ứng dụng có hoạt động như vậy.
  • Nếu không thể tương tác với thông báo của ứng dụng, thì người dùng sẽ không thể kích hoạt chương trình khuyến mãi của ứng dụng vào bộ chứa đang hoạt động. Trong trường hợp này, hãy cân nhắc thiết kế lại một số thông báo cho phép người dùng tương tác. Để biết thêm về các nguyên tắc, vui lòng xem phần Mẫu thiết kế thông báo cho Material Design.

  • Nếu nếu ứng dụng không hiện thông báo khi nhận được thông báo có mức độ ưu tiên cao được gửi bằng Giải pháp gửi thông báo qua đám mây của Firebase (FCM), thì người dùng sẽ không thể tương tác với ứng dụng đó. Vì vậy, ứng dụng sẽ được thăng cấp lên bộ chứa Đang hoạt động. Trên thực tế, mục đích duy nhất cho các thông báo FCM có mức độ ưu tiên cao là đẩy một thông báo đến người dùng nên trường hợp này không được xảy ra. Trên 12L (API cấp 32) trở xuống, nếu bạn đánh dấu nhầm một thông báo FCM là có mức độ ưu tiên cao dù thông báo này không kích hoạt tương tác của người dùng, thì việc đó có thể khiến các thông báo trong tương lai không được ưu tiên.

  • Nếu ứng dụng được chia thành nhiều gói, thì các gói đó có thể nằm trong những bộ chứa khác nhau và sẽ có các cấp truy cập khác nhau. Hãy kiểm thử các ứng dụng này với các gói được chỉ định cho nhiều bộ chứa để đảm bảo ứng dụng hoạt động đúng cách.