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ờ của ứ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 sử dụng gần đây và tần suất sử 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 một trong năm 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ể sử dụng một ứng dụng tải sẵn, sử dụng công nghệ máy học để xác định khả năng sử dụng của mỗi ứng dụng, và chỉ định ứng dụng cho các 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 mức sử dụng ứng dụng. 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, nhờ đó, ứng dụng có thể dùng nhiều tài nguyên hệ thống hơn. Cụ thể là bộ chứa này 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.

Lưu ý: Nhà sản xuất nào cũng có thể đặt các tiêu chí riêng cho cách các ứng dụng không hoạt động được chỉ định cho các bộ chứa. Bạn không nên cố gắng tác động đến bộ chứa ứng dụng được chỉ định. Thay vào đó, hãy tập trung vào việc đảm bảo ứng dụng của bạn hoạt động hiệu quả trong mọi bộ chứa ứng dụng. Ứng dụng của bạn có thể tìm ra bộ chứa hiện có bằng cách gọi UsageStatsManager.getAppStandbyBucket().

Các bộ chứa này bao gồm:

  1. Đang hoạt động: Ứng dụng hiện đang được sử dụng hoặc đã được sử dụng gần đây.
  2. Nhóm hoạt động: Ứng dụng đang sử dụng thông thường.
  3. Thường xuyên: Ứng dụng thường được sử dụng, nhưng không phải mỗi ngày.
  4. Hiếm gặp: Ứng dụng không được sử dụng thường xuyên.
  5. Bị hạn chế: Ứng dụng tiêu tốn nhiều tài nguyên của hệ thống, hoặc có thể có hành vi không mong muốn.

Ngoài ra, có một bộ chứa đặc biệt với chế độ là không bao giờ, chỉ dành cho các ứng dụng đã được cài đặt nhưng chưa bao giờ được 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.

Lưu ý: Các ứng dụng nằm trong danh sách miễn trừ Nghỉ sẽ được miễn khỏi các hạn chế dựa trên bộ chứa chế độ chờ của ứng dụng.

Lưu ý: 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ụm từ gợi ý này sử dụng công nghệ máy học để 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 mức sử dụng gần đây. Ví dụ: một ứng dụng bạn dùng gần đây có thể trở thành bộ chứa hiếm, vì công nghệ máy học dự đoán bạn sẽ không dùng ứng dụng đó trong vài giờ.

Đang hoạt động

Một ứng dụng sẽ nằm trong bộ chứa đang hoạt động nếu người dùng hiện đang sử dụng ứng dụng hoặc mới sử dụng ứng dụng gần đây. Ví dụ:

  • Ứng dụng đã ra mắt một hoạt động
  • Ứng dụng của bạn đang chạy một dịch vụ trên nền trước.
  • Ứng dụng này có một bộ chuyển đổi đồng bộ hóa liên kết với một nhà cung cấp nội dung mà một ứng dụng trên nền trước sử dụng
  • Người dùng nhấp vào một thông báo trong ứng dụng

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

Bộ dụng cụ làm việc

Một ứng dụng sẽ nằm trong bộ chứa hoạt động nếu ứng dụng đó chạy thường xuyên nhưng hiện 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 hết các ngày có khả năng đang hoạt động. Các ứng dụng cũng được thăng cấp vào bộ chứa hoạt động nếu chúng được sử dụng gián tiếp.

Nếu một ứng dụng đang 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ô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 thường xuyên được sử dụng. 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ô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. Ngoài kiểu sử dụng, hệ thống sẽ xem xét hành vi của ứng dụng để quyết định xem có nên đặt ứng dụng của bạn vào bộ chứa bị hạn chế hay không.

Ứng dụng của bạn ít có khả năng được đưa vào bộ chứa bị hạn chế nếu nó sử dụng tài nguyên hệ thống có trách nhiệm hơn. Ngoài ra, hệ thống sẽ đặt ứng dụng của bạn vào một bộ chứa ít hạn chế hơn nếu người dùng tương tác trực tiếp với ứng dụng của bạn.

Nếu hệ thống đặt ứng dụng của bạn vào bộ chứa bị hạn chế, thì các điểm hạn chế sau 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 của ứng dụng 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 mọi công việc khác.
  • Ứng dụng của bạn có thể chạy nhiều công việc nhanh 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.

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

Nếu ứng dụng của bạn đã tuân thủ 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 mới sẽ không hề khó khăn. Tuy nhiên, một số hành vi ứng dụng trước đây 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 hoặc nhiều bộ chứa khác. Các phương pháp phân bộ chứa của hệ thống có thể thay đổi và mọi nhà sản xuất thiết bị đều 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. Bạn nên thiết kế lại ứng dụng của mình để có hoạt động như vậy.
  • Nếu không thể xử lý thông báo của ứng dụng, 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 bằng cách tương tác với thông báo. Trong trường hợp này, bạn nên thiết kế lại một số thông báo thích hợp để người dùng có thể phản hồi. Để 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.
  • Tương tự như vậy, nếu ứng dụng không hiển thị thông báo khi nhận được thông báo FCM có mức độ ưu tiên cao, thì người dùng sẽ không có cơ hội tương tác với ứng dụng, và do đó sẽ thăng cấp ứng dụng tới bộ chứa 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 thông báo cho người dùng, vì vậy, trường hợp này sẽ không bao giờ xảy ra. Nếu bạn đánh dấu không phù hợp một thông báo FCM là thông báo có mức độ ưu tiên cao khi nó không kích hoạt sự tương tác của người dùng, thì điều này có thể khiến các thông báo trong tương lai bị giảm mức độ ưu tiên.

    Lưu ý: Nếu người dùng đóng một thông báo nhiều lần, thì hệ thống sẽ cung cấp cho người dùng tùy chọn chặn thông báo đó trong tương lai. Đừng gửi thông báo cho người dùng chỉ với mục đích cố gắng giữ cho ứng dụng của bạn trong bộ chứa đang hoạt động!

  • Nếu ứng dụng được chia thành nhiều gói, thì các gói đó có thể nằm trong các bộ chứa khác nhau và do đó, có các cấp truy cập khác nhau. Bạn nên đảm bảo kiểm tra các ứng dụng như vậ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.

Thử nghiệm

Để 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:

  • 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 một Bộ chứa ứng dụng ở chế độ chờ có giá trị lớn hơn STANDBY_BUCKET_ACTIVE (10).