Tủ đông ứng dụng được lưu trong bộ nhớ đệm

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 setProcessFrozenenableFreezer . Để 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óa Frozen .

  • 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\)"