พื้นที่เก็บข้อมูลแอปที่แคชไว้

Android 11 QPR3 ขึ้นไปรองรับเครื่องมือแช่แอปแคชไว้ชั่วคราว ฟีเจอร์นี้จะหยุดการดำเนินการของกระบวนการที่แคชไว้และลดการใช้ทรัพยากรของแอปที่ทำงานผิดปกติซึ่งอาจพยายามทำงานขณะที่แคชไว้ เฟรมเวิร์กจะหยุดแอปที่แคชไว้ชั่วคราวโดยการย้ายข้อมูลกระบวนการของแอปไปยัง cgroup ที่หยุดไว้ชั่วคราว ซึ่งจะช่วยลดการใช้ CPU ที่ทำงานอยู่และไม่ได้ทำงานเมื่อมีแอปที่แคชไว้ซึ่งทำงานอยู่ คุณเปิดใช้โปรแกรมหยุดแอปชั่วคราวได้โดยใช้ Flag การกําหนดค่าระบบหรือตัวเลือกสําหรับนักพัฒนาแอป

ใช้เครื่องมือหยุดแอป

ตัวหยุดแอปแคชไว้ใช้ประโยชน์จากตัวหยุด 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 เหล่านี้ที่ ActivityManagerProcess.java และ 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\)"