Android 11 QPR3 trở lên hỗ trợ ngăn xếp ứng dụng được lưu trong bộ nhớ đệm. Tính năng này dừng việc thực thi các quy trình được lưu trong bộ nhớ đệm và giảm mức sử dụng tài nguyên do các ứng dụng hoạt động sai có thể cố gắng hoạt động trong khi được lưu vào bộ nhớ đệm. Khung này đóng băng các ứng dụng được lưu trong bộ nhớ đệm bằng cách di chuyển các quy trình của chúng vào một nhóm bị đóng băng; điều này làm giảm mức tiêu thụ CPU đang hoạt động và không hoạt động khi có các ứng dụng được lưu trong bộ nhớ đệm đang hoạt động. Tủ đông ứng dụng có thể được bật bằng cờ cấu hình hệ thống hoặc tùy chọn nhà phát triển.
Triển khai tủ đông ứng dụng
Tủ đông ứng dụng được lưu trong bộ nhớ đệm tận dụng tủ đông kernel cgroup v2. Các thiết bị vận chuyển có hạt nhân tương thích có thể (tùy chọn) kích hoạt nó. Để làm như vậy, hãy bật tùy chọn dành cho nhà phát triển "Tạm dừng thực thi các ứng dụng được lưu trong 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
Tủ đông bị tắt khi cờ use_freezer
được đặt thành false hoặc tùy chọn nhà phát triển bị tắt. Bạn có thể chuyển đổi cài đặt này bằng cách thay đổi cấu hình thiết bị trong bản phát hành hoặc cập nhật phần mềm.
Tủ đông ứng dụng không hiển thị các API chính thức (và không có ứng dụng khách triển khai tham chiếu) nhưng sử dụng các API hệ thống ẩn setProcessFrozen
và enableFreezer
. Để biết chi tiết về các API này, hãy tham khảo Process.java
và API Hoạt động quản lý dịch vụ của Trình quản lý hoạt động. Nhà phát triển cũng có thể tham khảo mã ứng dụng khách trong ActivityManager
để thử nghiệm.
Xử lý các tính năng tùy chỉnh
Thông thường, các quy trình dự kiến sẽ không thực hiện bất kỳ công việ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 tùy 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 bật ngăn đông ứng dụng trên thiết bị chạy ứng dụng như vậy, các quy trình được lưu trong bộ nhớ đệm sẽ bị đóng băng và có thể ngăn các tính năng tùy chỉnh hoạt động.
Như một giải pháp thay thế, nếu một ứng dụng có một 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 của quy trình thành không được lưu vào bộ nhớ đệm (chẳng hạn như Dịch vụ tiền cảnh giới hạn (BFGS) hoặc tiền cảnh) trước khi quy trình đó cần thực hiện bất kỳ công việc nào để cho phép ứng dụng để duy trì hoạt động.
Kiểm tra tủ đông ứng dụng
Để xác minh ngăn đông ứng dụng đ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ị đóng băng bằng lệnh
adb shell dumpsys activity
và grep từ khóaFrozen
.Kiểm tra sự hiện diện của tệp
/sys/fs/cgroup/uid_0/cgroup.freeze
.Xem logcat, hiển thị các mục được đóng băng và không đóng băng mỗi khi một quy trình di chuyển vào hoặc ra khỏi tủ đông. Ví dụ:
adb logcat | grep -i "\(freezing\|froze\)"