Quản lý nguồn

Android 9 (API cấp 28) giới thiệu các tính năng mới để cải thiện khả năng quản lý nguồn điện của thiết bị. Các những thay đổi khác, cùng với những tính năng đã có trong phiên bản trước đó, giúp để đảm bảo tài nguyên hệ thống được cung cấp cho những ứng dụng cần chúng nhất.

Có 2 loại tính năng quản lý nguồn điện:

Nhóm chế độ chờ ứng dụng
Hệ thống giới hạn số lượng ứng dụng vào các tài nguyên thiết bị như CPU hoặc pin, dựa trên thói quen sử dụng của người dùng. Đây là tính năng mới cho Android 9.
Cải tiến trình tiết kiệm pin
Khi bạn bật trình tiết kiệm pin, hệ thống đặt các hạn chế lên tất cả ứng dụng. Đây là một tính năng hiện có được cải tiến với Android 9.

Nhóm chế độ chờ ứng dụng

Android 9 giới thiệu một tính năng mới giúp quản lý pin: Bộ chứa chế độ chờ ứng dụng. Bộ chứa chế độ chờ ứng dụng giúp hệ thống ưu tiên ứng dụng yêu cầu về tài nguyên dựa trên về mức độ gần đây và tần suất sử dụng ứng dụng. Dựa trên việc sử dụng ứng dụng mẫu, mỗi ứng dụng sẽ được đặt vào một trong năm nhóm ưu tiên. Hệ thống giới hạn tài nguyên thiết bị có sẵn cho mỗi ứng dụng dựa trên bộ chứa mà ứng dụng đã tham gia.

Năm nhóm này ưu tiên các ứng dụng thành các nhóm theo đặc điểm sau:

Đang hoạt động

Một ứng dụng 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 đó, đối với 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ộ điều hợp đồng bộ hoá liên kết với một nhà cung cấp nội dung được ứng dụng trên nền trước
  • Người dùng nhấp vào một thông báo trong ứng dụng

Nếu ứ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ông việc, báo thức hoặc tin nhắn FCM của ứng dụng.

Nhóm hoạt động

Một ứng dụng nằm trong bộ chứa nhóm đang hoạt động nếu ứng dụng đó chạy thường xuyên nhưng hiện tại thì không đang 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 là có thể nằm trong nhóm hoạt động. Các ứng dụng cũng được thăng cấp lên nhóm hoạt động bộ chứa 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, hãy xem 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 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, hệ thống sẽ đặt ra các hạn chế mạnh mẽ hơn đối với khả năng chạy công việc và kích hoạt chuông báo, đồng thời cũng đặt ra giới hạn đối với tin nhắn FCM có mức độ ưu tiên cao. Để biết thông tin chi tiết, hãy xem 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ụ: ứ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ể ở bộ chứa.

Nếu một ứng dụng nằm trong bộ chứa hiếm, 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, kích hoạt chuông báo và nhận tin nhắn FCM có mức độ ưu tiên cao. Hệ thống cũng giới hạn khả năng kết nối Internet của ứng dụng. Cho để biết thông tin chi tiết, hãy xem phần Hạn chế quản lý nguồn.

Không bao giờ

Các ứng dụng đã được cài đặt nhưng chưa bao giờ chạy sẽ được chỉ định vào bộ chứa không bao giờ. 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.

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 khi cần. Hệ thống này có thể dựa vào ứng dụng tải trước dùng máy đang học cách xác định khả năng mỗi ứng dụng sẽ được sử dụng và chỉ định ứng dụng cho bộ chứa thích hợp. Nếu hệ thống ứng dụng không có trên thiết bị, 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. Các ứng dụng đang hoạt động khác được chỉ định cho những bộ chứa cung cấp cho ứng dụng mức độ ưu tiên cao hơn, giúp thêm tài nguyên hệ thống có sẵn cho ứng dụng. Cụ thể, nhóm xác định tần suất chạy công việc của ứng dụng, tần suất ứng dụng có thể kích hoạt các chuông báo cũng như tần suất ứng dụng có thể nhận được Firebase Cloud có mức độ ưu tiên cao Nhắn tin (FCM). 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.

Nhà sản xuất nào cũng có thể đặt ra các tiêu chí riêng về mức độ tương tác của ứng dụng không hoạt động được gán cho các nhóm. Bạn không nên cố gắng tác động đến bộ chứa ứng dụng người được giao. 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 bất cứ bộ chứa thông tin đó. Ứng dụng của bạn có thể tìm ra bộ chứa hiện tại gọi phương thức mới UsageStatsManager.getAppStandbyBucket().

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

Nếu ứng dụng của bạn đang làm theo các phương pháp hay nhất để Chế độ nghỉ và chế độ chờ ứng dụng, việc xử lý các tính năng quản lý nguồn mới 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 khác. Các phương thức phân bộ chứa của hệ thống và mọi thiết bị đều có thể thay đổi có thể chọn viết ứng dụng phân bộ chứa của riêng họ bằng thuật toán. 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ó của bạn.
  • Nếu thông báo của ứng dụng không thể xử lý được, thì người dùng sẽ không thể kích hoạt thông báo đó 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 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 để chúng cho phép phản hồi từ người dùng. Để biết một số nguyên tắc, hãy xem Thiết kế thông báo Material Design mẫu.
  • Tương tự, 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 sẽ không mang lại cho người dùng cơ hội tương tác với ứng dụng và do đó, quảng cáo ứng dụng cho bộ chứa đang hoạt động. Trên thực tế, mục đích duy nhất của 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 nên trường hợp này 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à có mức độ ưu tiên cao khi tin nhắn đó không kích hoạt tương tác của người dùng, điều đó có thể gây ra các hậu quả tiêu cực khác; ví dụ: có thể khiến ứng dụng của bạn hết hạn mức, dẫn đến việc thực sự khẩn cấp Tin nhắn FCM sẽ được xử lý ở mức độ ưu tiên bình thường.

    Lưu ý: Nếu người dùng đóng một thông báo nhiều lần, thì hệ thống cho phép người dùng chặn thông báo đó trong tương lai. Không gửi thông báo cho người dùng chỉ để cố gắng duy trì 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 nhiều nhóm khác nhau nên có các cấp truy cập khác nhau. Bạn cần lưu ý thử nghiệm ứng dụng như vậy với các gói được chỉ định cho nhiều bộ chứa khác nhau để đảm bảo ứng dụng hoạt động đúng cách.

Cải tiến trình tiết kiệm pin

Android 9 có một số cải tiến cho chế độ tiết kiệm pin. Nhà sản xuất thiết bị xác định các quy định hạn chế chính xác được đặt ra. Ví dụ: bật Bản dựng AOSP, hệ thống sẽ áp dụng các hạn chế sau:

  • Hệ thống đặt các ứng dụng ở chế độ chờ ứng dụng một cách linh hoạt hơn, thay vì khi ứng dụng ở trạng thái rảnh.
  • Giới hạn thực thi trong nền áp dụng cho tất cả ứng dụng, bất kể API mục tiêu cấp độ.
  • Dịch vụ vị trí có thể bị tắt khi màn hình tắt.
  • Ứng dụng nền không có quyền truy cập mạng.

Ngoài ra, còn có các tính năng tối ưu hoá nguồn pin khác dành riêng cho thiết bị. Dùng cho toàn bộ để biết thông tin chi tiết, hãy xem trang mô tả tính năng quản lý nguồn điện hạn chế.

Như thường lệ, bạn nên kiểm thử ứng dụng trong khi trình tiết kiệm pin đang hoạt động. Bạn có thể bật trình tiết kiệm pin theo cách thủ công thông qua phần Cài đặt > của thiết bị Pin Trình tiết kiệm.

Kiểm tra và khắc phục sự cố

Các tính năng quản lý nguồn mới ảnh hưởng đến tất cả ứng dụng chạy trên thiết bị Android 9, cho dù hoặc không nhắm đến Android 9. Điều quan trọng là đảm bảo ứng dụng của bạn hoạt động đúng cách trên các thiết bị này.

Hãy nhớ thử nghiệm các trường hợp sử dụng chính của ứng dụng trong nhiều điều kiện để xem cách các tính năng quản lý nguồn điện tương tác với nhau. Bạn có thể dùng Android Các lệnh Cầu gỡ lỗi để bật một số các tính năng.

Lệnh Cầu gỡ lỗi Android

Bạn có thể dùng các lệnh shell Cầu gỡ lỗi Android để thử nghiệm một số tính năng quản lý nguồn.

Để biết thông tin về cách sử dụng ADB nhằm đưa thiết bị của bạn vào chế độ Nghỉ, hãy xem Thử nghiệm với chế độ Nghỉ và Chế độ chờ ứng dụng.

Nhóm chế độ chờ ứng dụng

Bạn có thể sử dụng ADB để chỉ định ứng dụng của mình theo cách thủ công cho một Nhóm chế độ chờ ứng dụng. Để thay đổi bộ chứa của một ứng dụng, hãy dùng lệnh sau:

$ adb shell am set-standby-bucket packagename active|working_set|frequent|rare

Bạn cũng có thể sử dụng lệnh đó để đặt nhiều gói cùng một lúc:

$ adb shell am set-standby-bucket package1 bucket1 package2 bucket2...

Để kiểm tra xem một ứng dụng đang ở trong nhóm nào, hãy chạy

$ adb shell am get-standby-bucket [packagename]

Nếu bạn không truyền tham số packagename, lệnh sẽ liệt kê các bộ chứa cho tất cả ứng dụng. Ứng dụng cũng có thể tìm thấy bộ chứa trong thời gian chạy bằng cách gọi phương thức mới UsageStatsManager.getAppStandbyBucket().

Trình tiết kiệm pin

Có một số lệnh để kiểm tra cách ứng dụng của bạn hoạt động ở tình trạng pin yếu.

Để mô phỏng thiết bị đang rút phích cắm, hãy dùng lệnh

$ adb shell dumpsys battery unplug

Để kiểm tra xem thiết bị hoạt động như thế nào ở tình trạng pin yếu, hãy dùng lệnh sau:

$ adb shell settings put global low_power 1

Sau khi hoàn tất quá trình thử nghiệm, bạn có thể huỷ các chế độ cài đặt theo cách thủ công trên thiết bị của mình bằng lệnh sau:

$ adb shell dumpsys battery reset