Android 11 QPR3 trở lên hỗ trợ tính năng đóng băng các ứng dụng được lưu vào bộ nhớ đệm. Tính năng này dừng thực thi cho các quy trình được lưu vào bộ nhớ đệm và giảm mức sử dụng tài nguyên của các ứng dụng có hành vi không đúng mực có thể tìm cách hoạt động trong khi được lưu vào bộ nhớ đệm. Khung đóng băng các ứng dụng được lưu vào bộ nhớ đệm bằng cách di chuyển các quy trình của ứng dụng vào một cgroup đóng băng; điều này làm giảm mức tiêu thụ CPU đang hoạt động và ở trạng thái chờ khi có các ứng dụng được lưu vào bộ nhớ đệm đang hoạt động. Bạn có thể bật tính năng đóng băng ứng dụng bằng cách sử dụng cờ cấu hình hệ thống hoặc lựa chọn dành cho nhà phát triển.
Triển khai tính năng đóng băng ứng dụng
Trình đóng băng ứng dụng được lưu vào bộ nhớ đệm tận dụng trình đóng băng cgroup v2 của nhân. Các thiết bị đi kèm với một nhân tương thích có thể (không bắt buộc) bật tính năng này. Để làm như vậy, hãy bật tuỳ chọn dành cho nhà phát triển "Tạm ngưng thực thi cho các ứng dụng được lưu vào bộ nhớ đệm" hoặc đặt cờ cấu hình thiết bị activity_manager_native_boot use_freezer
thành true
. Ví dụ:
adb shell device_config put activity_manager_native_boot use_freezer true && adb reboot
Chế độ đóng băng sẽ bị tắt khi cờ use_freezer
được đặt thành false hoặc khi tuỳ chọn dành cho nhà phát triển bị tắt. Bạn có thể bật/tắt chế độ cài đặt này bằng cách thay đổi cấu hình thiết bị trong một bản phát hành hoặc cập nhật phần mềm.
Trình đóng băng ứng dụng không hiển thị các API chính thức (và không có ứng dụng tham chiếu), nhưng có sử dụng các API hệ thống ẩn setProcessFrozen
và enableFreezer
. Để biết thông tin chi tiết về các API này, hãy tham khảo Process.java
của ActivityManager và API ActivityManagerService. Nhà phát triển cũng có thể tham khảo mã ứng dụng trong ActivityManager
cho các thử nghiệm.
Xử lý các tính năng tuỳ chỉnh
Thông thường, các quy trình không được phép thực hiện bất kỳ thao tác nào khi được lưu vào bộ nhớ đệm, nhưng một số ứng dụng có thể có các tính năng tuỳ chỉnh được hỗ trợ bởi các quy trình dự kiến sẽ chạy trong khi được lưu vào bộ nhớ đệm. Khi trình đóng băng ứng dụng được bật trên một thiết bị đang chạy ứng dụng như vậy, các quy trình được lưu vào bộ nhớ đệm sẽ bị đóng băng và có thể ngăn các tính năng tuỳ chỉnh hoạt động.
Để khắc phục, nếu một ứng dụng có quy trình cần thực hiện các hoạt động trong khi được lưu vào bộ nhớ đệm, hãy thay đổi trạng thái quy trình thành không được lưu vào bộ nhớ đệm (chẳng hạn như Bound ForeGround Service (BFGS) hoặc nền trước) trước khi quy trình cần thực hiện bất kỳ thao tác nào để cho phép ứng dụng duy trì trạng thái hoạt động.
Kiểm thử tính năng đóng băng ứng dụng
Để xác minh rằng app freezer đang hoạt động như dự kiến, hãy sử dụng các tài nguyên sau:
Kiểm tra danh sách các quy trình bị treo bằng lệnh
adb shell dumpsys activity
và grep choApps frozen:
.Kiểm tra xem có tệp
/sys/fs/cgroup/uid_0/cgroup.freeze
hay không.Xem logcat, trong đó cho thấy các mục nhập bị đóng băng và không bị đóng băng mỗi khi một quy trình di chuyển vào hoặc ra khỏi ngăn chứa. Ví dụ:
adb logcat | grep -i "\(freezing\|froze\)"