ตู้แช่แข็งแอปที่แคชไว้

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