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