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

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

ใช้งานแอปแช่แข็ง

ช่องแช่แข็งแอปที่แคชไว้ใช้ประโยชน์จากช่องแช่แข็งเคอร์เนล cgroup v2 อุปกรณ์ที่จัดส่งด้วยเคอร์เนลที่เข้ากันได้สามารถ (เป็นทางเลือก) เปิดใช้งานได้ หากต้องการดำเนินการดังกล่าว ให้เปิดใช้งานตัวเลือกสำหรับนักพัฒนาซอฟต์แวร์ "ระงับการดำเนินการสำหรับแอปที่แคชไว้" หรือตั้งค่าแฟล็กการกำหนดค่าอุปกรณ์ activity_manager_native_boot use_freezer เป็น true ตัวอย่างเช่น:

adb shell device_config put activity_manager_native_boot use_freezer true && adb reboot

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

แอปแช่แข็งไม่เปิดเผย API อย่างเป็นทางการ (และไม่มีไคลเอนต์การใช้งานอ้างอิง) แต่ใช้ API ของระบบที่ซ่อนอยู่ setProcessFrozen และ enableFreezer สำหรับรายละเอียดเกี่ยวกับ API เหล่านี้ โปรดดูที่ Process.java ของ ActivityManager และ ActivityManagerService API นักพัฒนายังสามารถอ้างอิงถึงรหัสไคลเอนต์ใน ActivityManager เพื่อทำการทดลอง

จัดการคุณสมบัติที่กำหนดเอง

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

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

ทดสอบช่องแช่แข็งของแอป

หากต้องการตรวจสอบว่าช่องแช่แข็งแอปทำงานตามที่ตั้งใจไว้ ให้ใช้แหล่งข้อมูลต่อไปนี้:

  • ตรวจสอบรายการกระบวนการที่ค้างโดยใช้คำสั่ง adb shell dumpsys activity และ grep คีย์เวิร์ด Frozen

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

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

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