Android 11 QPR3 ขึ้นไปรองรับเครื่องมือแช่แอปแคชไว้ชั่วคราว ฟีเจอร์นี้จะหยุดการดำเนินการของกระบวนการที่แคชไว้และลดการใช้ทรัพยากรของแอปที่ทำงานผิดปกติซึ่งอาจพยายามทำงานขณะที่แคชไว้ เฟรมเวิร์กนี้จะหยุดแอปที่แคชไว้โดยการย้ายข้อมูลกระบวนการไปไว้ใน cgroup ที่ตรึงไว้ ซึ่งจะช่วยลดการใช้ CPU ที่มีการใช้งานและไม่มีการใช้งานเมื่อพบว่ามีแอปที่แคชไว้ที่ใช้งานอยู่ คุณเปิดใช้ช่องแช่แข็งแอปได้โดยใช้แฟล็กการกำหนดค่าของระบบหรือตัวเลือกสำหรับนักพัฒนาซอฟต์แวร์
ใช้งานตู้แช่แข็งแอป
ตู้แช่แข็งของแอปที่แคชไว้จะใช้ประโยชน์จากตู้แช่แข็ง Kernel cgroup v2 อุปกรณ์ที่มาพร้อมกับเคอร์เนลที่เข้ากันได้จะเปิดใช้ (ไม่บังคับ) ได้ โดยเปิดใช้ตัวเลือกสำหรับนักพัฒนาแอป "ระงับการดำเนินการสำหรับแอปที่แคชไว้" หรือตั้งค่า Flag การกำหนดค่าอุปกรณ์ activity_manager_native_boot use_freezer
เป็น true
เช่น
adb shell device_config put activity_manager_native_boot use_freezer true && adb reboot
ระบบจะปิดใช้การแช่แข็งเมื่อตั้งค่า Flag use_freezer
เป็นเท็จหรือปิดใช้ตัวเลือกสำหรับนักพัฒนาซอฟต์แวร์ คุณสามารถเปิด/ปิดการตั้งค่านี้ได้โดยเปลี่ยนการกำหนดค่าอุปกรณ์ในรุ่นหรือการอัปเดตซอฟต์แวร์
แอปฟรีเซอร์ไม่ได้เปิดเผย API อย่างเป็นทางการ (และไม่มีไคลเอ็นต์การใช้งานข้อมูลอ้างอิง) แต่ใช้ API ระบบที่ซ่อนอยู่ setProcessFrozen
และ enableFreezer
โปรดดูรายละเอียดเกี่ยวกับ API เหล่านี้ที่ Process.java
ของ ActivityManager และ ActivityManagerService API นักพัฒนาซอฟต์แวร์ยังสามารถดูรหัสไคลเอ็นต์ใน ActivityManager
สำหรับการทดสอบได้
จัดการฟีเจอร์ที่กำหนดเอง
โดยปกติแล้ว กระบวนการจะไม่ทำงานเมื่อแคชไว้ แต่แอปบางแอปอาจมีฟีเจอร์ที่กำหนดเองซึ่งรองรับกระบวนการที่คาดว่าจะทำงานขณะแคชไว้ เมื่อเปิดใช้โปรแกรมแช่แอปในอุปกรณ์ที่ใช้แอปดังกล่าว ระบบจะหยุดกระบวนการแคชไว้และอาจทำให้ฟีเจอร์ที่กำหนดเองไม่ทำงาน
วิธีแก้ปัญหาคือ หากแอปมีกระบวนการที่ต้องทํากิจกรรมขณะแคชอยู่ ให้เปลี่ยนสถานะกระบวนการเป็น "ไม่ได้แคช" (เช่น Bound ForeGround Service (BFGS) หรือเบื้องหน้า) ก่อนที่กระบวนการจะต้องทํางานใดๆ เพื่ออนุญาตให้แอปยังคงทํางานอยู่
ทดสอบโปรแกรมแช่แข็งแอป
หากต้องการยืนยันว่าตู้แช่แข็งของแอปทำงานตามที่ตั้งใจไว้ ให้ใช้แหล่งข้อมูลต่อไปนี้
ตรวจสอบรายการกระบวนการที่หยุดทำงานโดยใช้คำสั่ง
adb shell dumpsys activity
และ grep สำหรับApps frozen:
ตรวจสอบว่ามีไฟล์
/sys/fs/cgroup/uid_0/cgroup.freeze
หรือไม่ดู Logcat ซึ่งแสดงรายการที่ตรึงและไม่ได้ตรึงทุกครั้งที่กระบวนการย้ายข้อมูลเข้าหรือออกจากช่องแช่แข็ง เช่น
adb logcat | grep -i "\(freezing\|froze\)"