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

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

ใช้ฟีเจอร์หยุดการทำงานของแอป

โปรแกรมหยุดแอปที่แคชไว้จะใช้ประโยชน์จากโปรแกรมหยุด 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 เหล่านี้ใน ActivityManager Process.java และ ActivityManagerService API นักพัฒนาแอปยังดูโค้ดฝั่งไคลเอ็นต์ใน ActivityManager สำหรับการทดสอบได้ด้วย

จัดการฟีเจอร์ที่กำหนดเอง

โดยปกติแล้ว กระบวนการจะไม่ทำงานเมื่อแคชไว้ แต่แอปบางแอป อาจมีฟีเจอร์ที่กำหนดเองซึ่งรองรับโดยกระบวนการที่คาดว่าจะทำงานขณะ แคชไว้ เมื่อเปิดใช้การหยุดแอปชั่วคราวในอุปกรณ์ที่เรียกใช้แอปดังกล่าว ระบบจะหยุดกระบวนการที่แคชไว้ชั่วคราวและอาจทำให้ฟีเจอร์ที่กำหนดเองใช้งานไม่ได้

วิธีแก้ปัญหาคือ หากแอปมีกระบวนการที่ต้องทำกิจกรรมขณะแคช ให้เปลี่ยนสถานะกระบวนการเป็นไม่ใช่แคช (เช่น Bound ForeGround Service (BFGS) หรือเบื้องหน้า) ก่อนที่กระบวนการจะต้องทำงานใดๆ เพื่ออนุญาตให้แอปยังคงใช้งานได้

ทดสอบการหยุดทำงานของแอป

หากต้องการยืนยันว่าเครื่องมือหยุดแอปชั่วคราวทำงานตามที่ต้องการ ให้ใช้แหล่งข้อมูลต่อไปนี้

  • ตรวจสอบรายการกระบวนการที่หยุดทำงานโดยใช้คำสั่ง adb shell dumpsys activity และ grep สำหรับ Apps frozen:

  • ตรวจสอบว่ามีไฟล์ /sys/fs/cgroup/uid_0/cgroup.freeze

  • ดู Logcat ซึ่งแสดงรายการที่ตรึงและเลิกตรึงทุกครั้งที่กระบวนการ ย้ายเข้าหรือออกจาก Freezer เช่น

    adb logcat | grep -i "\(freezing\|froze\)"