ผู้ใช้ Android โดยเฉลี่ยจะติดตั้งแอปมากกว่า 50 แอปในอุปกรณ์ (จำนวนจะเพิ่มขึ้นเมื่อระดับ RAM ของอุปกรณ์เพิ่มขึ้น) อย่างไรก็ตาม ผู้ใช้ไม่ได้ใช้แอปเหล่านี้จำนวนมากเป็นเวลานาน
การพักแอปจะพักแอปที่ผู้ใช้ไม่ได้ใช้งานเป็นเวลา 2-3 เดือน ซึ่งคล้ายกับการเพิกถอนสิทธิ์อัตโนมัติ การดำเนินการนี้จะบังคับให้แอปหยุดทำงานและเปลี่ยนสถานะเป็นสถานะที่เราเพิ่มประสิทธิภาพเพื่อการจัดเก็บแทนที่จะเป็นประสิทธิภาพ การเพิกถอนสิทธิ์อัตโนมัติจะรวมอยู่ในสถานะนี้ด้วย และทั้ง 2 อย่างจะใช้การตั้งค่าการยกเว้นเดียวกันในการตั้งค่า แอปที่ถูกบังคับให้หยุดทำงานจะไม่เรียกใช้ งานหรือการแจ้งเตือนในเบื้องหลัง และไม่สามารถส่งการแจ้งเตือนแบบพุชได้ เมื่อผู้ใช้ใช้แอปอีกครั้ง แอปจะออกจากโหมดไฮเบอร์เนตและ งาน/การแจ้งเตือน/การแจ้งเตือนจะทำงานอีกครั้งตามปกติ งาน/การแจ้งเตือน/การแจ้งเตือน ที่กำหนดเวลาไว้ก่อนที่แอปจะเข้าสู่โหมดไฮเบอร์เนตจะต้อง กำหนดเวลาใหม่
OEM ที่แก้ไขแพลตฟอร์มอาจขัดแย้งกับการใช้งานการจำศีลของแอป เช่น
- การแก้ไขคำจำกัดความการใช้งานแอปหรือการนำวิธีปลุกแอปที่ไม่ได้อยู่ใน AOSP มาใช้ อาจขัดขวางความแม่นยำของการจำศีลของแอป
- กลไกการจำกัดที่เป็นกรรมสิทธิ์ของ OEM ซึ่งคล้ายกับการจำศีลของแอปอาจ มีวัตถุประสงค์คล้ายกัน แม้ว่าทั้ง 2 อย่างจะอยู่ร่วมกันได้ แต่ก็อาจมีการทับซ้อนกันบ้าง
CDD ระบุข้อกำหนดชุดใหม่สำหรับการเปลี่ยนแปลงที่อิงตามการใช้งานแอป ซึ่งคล้ายกับข้อกำหนด 3.5.1 ที่มีอยู่ การพักแอปจะเป็นไปตามข้อกำหนดต่อไปนี้
โค้ดเฟรมเวิร์กจะอยู่ใน
- repo: platform/frameworks/base
- ไดเรกทอรี: services/core/java/com/android/server/apphibernation
ตรรกะของนโยบายจะอยู่ในส่วนต่อไปนี้
- repo: platform/packages/modules/Permission
- directory: PermissionController/src/com/android/permissioncontroller/hibernation
สถาปัตยกรรมระดับสูง
บริการของระบบการพักแอปจะเพิ่มประสิทธิภาพแอปที่ผู้ใช้ไม่ค่อยได้ใช้งานเพื่อการจัดเก็บ และป้องกันไม่ให้แอปเหล่านั้นทำงานในเบื้องหลัง เมื่อเข้าสู่โหมดไฮเบอร์เนตแอป เราจะดำเนินการดังนี้เพื่อให้ได้ผลลัพธ์ดังกล่าว
- การเพิกถอนสิทธิ์อัตโนมัติ
- บังคับให้แอปหยุด
- ลบไฟล์ ODEX และ VDEX
- ลบแคชของแอป
เป้าหมายของเราคือการใช้โหมดไฮเบอร์เนตเป็นการดำเนินการที่ย้อนกลับได้ เพื่อให้ผู้ใช้ยังคงเข้าถึงแอปได้ผ่าน Launcher และแพลตฟอร์มอื่นๆ โดยที่ข้อมูลแอปยังคงอยู่ครบถ้วน เมื่อเปิดแอป เราจะกู้คืนแอปจากสถานะบังคับหยุด และสร้างไฟล์ ODEX และ VDEX ต่อไปตามปกติ
การออกแบบที่วางแผนไว้จะเน้นที่ 2 ส่วนหลักๆ ดังนี้
- การพิจารณาว่าควรพักแพ็กเกจเมื่อใด
- การเพิ่มประสิทธิภาพแพ็กเกจที่จำศีล
บริการของระบบใหม่ AppHibernationService
และบริการงาน AppHibernationJobService,
ใน PermissionController
คือตัวเชื่อมที่ควบคุมการตัดสินใจและตรรกะโดยรวม
การพิจารณาว่าเมื่อใดที่ควรพักแพ็กเกจจะขับเคลื่อนโดยUsageStatsService
เป็นหลักและจัดการโดยAppHibernationJobService
ในPermissionController
ตรรกะของนโยบายนี้อยู่ใน PermissionController
เพื่อให้เราอัปเดตแบบไดนามิกผ่าน Mainline ได้ นอกจากนี้ เรายังวางแผนที่จะเพิ่มสัญญาณใหม่ นั่นคือการใช้งานคอมโพเนนต์ เพื่อบันทึกการใช้งานคอมโพเนนต์ของแพ็กเกจ
(เช่น บริการ ผู้ให้บริการเนื้อหา) เป็นเมตริกใหม่ใน UsageStatsService
การเพิ่มประสิทธิภาพแพ็กเกจคือจุดที่การประหยัดและการเพิ่มประสิทธิภาพจริงทั้งหมดเกิดขึ้น
AppHibernationService
สื่อสารกับส่วนต่างๆ ของระบบ
เพื่อหยุดแพ็กเกจ ลบข้อมูลแคช ลบอาร์ติแฟกต์ ART และอื่นๆ
การเพิกถอนสิทธิ์จะเริ่มต้นโดยตรงจาก AppHibernationJobService
เพื่อคงฟังก์ชันการเพิกถอนอัตโนมัติในอุปกรณ์ Android 11 และเวอร์ชันที่ต่ำกว่า
ประสบการณ์ของผู้ใช้
ผู้ใช้จะได้รับทั้งข้อมูลและสิทธิ์ควบคุมแอปที่สามารถ เข้าสู่โหมดไฮเบอร์เนต
เช่นเดียวกับการเพิกถอนอัตโนมัติ ผู้ใช้จะได้รับการแจ้งเตือนเกี่ยวกับแอปที่เข้าสู่โหมดไฮเบอร์เนต และมีตัวเลือกในการไปที่การตั้งค่าโดยตรงจากการแจ้งเตือนเพื่อเปิดแอปและนำออกจากโหมดไฮเบอร์เนต หรือลบแอปที่ไม่ได้ใช้ออกหากจำเป็น
เรายังคงสนับสนุนความตั้งใจของนักพัฒนาแอปที่ต้องการขอให้ผู้ใช้ ยกเว้นการจำศีลด้วยสิทธิ์ที่มีอยู่ซึ่งมีเจตนาในการยกเว้นการเพิกถอนอัตโนมัติ
ความเข้ากันได้แบบย้อนหลัง
ฟีเจอร์เฉพาะการจำศีลพร้อมใช้งานใน Android 12 เป็นต้นไป ฟีเจอร์นี้ใช้ในเวอร์ชันก่อนหน้าไม่ได้เนื่องจากไม่มีคอมโพเนนต์แพลตฟอร์ม (เช่น บริการระบบใหม่) การเพิกถอนอัตโนมัติจะยังคง ทำงานตามที่ได้ติดตั้งใช้งานสำหรับระบบปฏิบัติการเวอร์ชันก่อนหน้า
ตั้งแต่ Android 12 เป็นต้นไป เราจะเพิ่มปุ่มเปิด/ปิดโหมดจำศีลในหน้าแอปภายในส่วนแอปและการแจ้งเตือนในการตั้งค่า เพื่อรับประกันความเข้ากันได้แบบย้อนหลัง พร้อมทั้งคงปุ่มเปิด/ปิดการเพิกถอนอัตโนมัติเดิมไว้ในเมนูย่อยสิทธิ์ ปุ่มเปิด/ปิดนี้ ควบคุมการยกเว้นระบบไฮเบอร์เนตแอปโดยรวมสำหรับ แอป
การปรับแต่ง
การติดตั้งใช้งานบางส่วนเป็นส่วนหนึ่งของคอมโพเนนต์ระบบแบบแยกส่วน ดังนั้นเราจึงไม่แนะนำให้พาร์ทเนอร์ แก้ไขฟีเจอร์นี้ พาร์ทเนอร์สามารถใช้ฟีเจอร์หรือฟังก์ชันการทำงานที่คล้ายกันแทนได้ตราบใดที่ปฏิบัติตามข้อกำหนด CDD
การพักแอปควรเป็นเปิดโดยค่าเริ่มต้นสําหรับแอปทั้งหมดที่กําหนดเป้าหมายเป็น Android 11 ขึ้นไป ซึ่งเหมือนกับการเพิกถอนสิทธิ์อัตโนมัติ แม้ว่าการตั้งค่าจะเปิดอยู่ แต่การใช้งานการพักแอปอาจแตกต่างกันไปในแต่ละแอปที่กำหนดเป้าหมายเป็น Android 11 กับ Android 12 กล่าวอย่างเจาะจงคือ การพักแอป จะใช้ได้เฉพาะกับแอปที่กำหนดเป้าหมายเป็น Android 11 ในขณะที่การเพิกถอนอัตโนมัติจะใช้ได้เฉพาะกับแอปที่กำหนดเป้าหมายเป็น Android 12
นอกจากนี้ OEM อาจใช้ฟีเจอร์ที่คล้ายกันด้วย อย่างไรก็ตาม ฟีเจอร์เหล่านั้นมีเป้าหมายในระยะเวลาที่สั้นกว่ามากสำหรับการเพิ่มประสิทธิภาพแบตเตอรี่ ซึ่งอาจเฉพาะเจาะจงสำหรับ OEM ฟีเจอร์การจำกัดแอปที่คล้ายกันซึ่งพัฒนาโดย OEM สามารถทำงานร่วมกับระบบไฮเบอร์เนตของแอปได้ ตราบใดที่เป็นไปตามเกณฑ์ที่มีอยู่ซึ่งกำหนดไว้ใน CDD
การทดสอบ
การพักแอปมี CTS และการทดสอบหน่วยเพื่อให้มั่นใจว่าแอปทำงานได้อย่างถูกต้อง
AutoRevokeTest
AppHibernationIntegrationTest