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