ผู้ใช้ Android โดยเฉลี่ยติดตั้งแอปมากกว่า 50 แอปในอุปกรณ์ของตน (จำนวนเพิ่มขึ้นเมื่อระดับ RAM ของอุปกรณ์เพิ่มขึ้น) อย่างไรก็ตาม ผู้ใช้จำนวนมากไม่ได้ใช้แอปเหล่านี้เป็นระยะเวลานาน
App Hibernation ไฮเบอร์เนตแอปที่ผู้ใช้ไม่ได้ใช้เป็นเวลาสองสามเดือน คล้ายกับการเพิกถอนสิทธิ์อัตโนมัติ เป็นการบังคับหยุดแอปและทำให้แอปอยู่ในสถานะที่เราปรับให้เหมาะสมสำหรับการจัดเก็บมากกว่าประสิทธิภาพ การเพิกถอนการอนุญาตอัตโนมัติ จะรวมอยู่ในสถานะนี้ด้วย และมีการแบ่งปันการตั้งค่าการยกเว้นเดียวกันใน การตั้งค่า แอปบังคับหยุดทำงานหรือแจ้งเตือนในเบื้องหลังและไม่สามารถส่งการแจ้งเตือนแบบพุชได้ เมื่อผู้ใช้ใช้แอปอีกครั้ง แอปจะออกจากโหมดไฮเบอร์เนตและงาน/การแจ้งเตือน/การแจ้งเตือนจะทำงานอีกครั้งตามปกติ งาน/การแจ้งเตือน/การแจ้งเตือนใดๆ ที่กำหนดเวลาไว้ก่อนที่แอปจะเข้าสู่โหมดไฮเบอร์เนตจะต้องจัดกำหนดการใหม่
OEM ที่ปรับเปลี่ยนแพลตฟอร์มอาจขัดแย้งกับการใช้งานแอปไฮเบอร์เนต ตัวอย่างเช่น
- การแก้ไขข้อกำหนดการใช้งานแอปหรือแนะนำวิธีการปลุกแอปที่ไม่ได้อยู่ใน AOSP อาจขัดจังหวะความแม่นยำของแอปไฮเบอร์เนต
- กลไกการจำกัดกรรมสิทธิ์ของ OEM ที่คล้ายกับการไฮเบอร์เนตของแอปอาจมีจุดประสงค์ที่คล้ายกัน แม้ว่าทั้งสองจะมีอยู่ได้ แต่ก็มีบางส่วนที่ทับซ้อนกันอยู่บ้าง
CDD สรุปข้อกำหนดชุดใหม่สำหรับการเปลี่ยนแปลงที่อิงตามการใช้งานแอป ซึ่งคล้ายกับข้อกำหนด 3.5.1 ที่มีอยู่ การไฮเบอร์เนตแอปเป็นไปตามข้อกำหนดเหล่านี้
รหัสเฟรมเวิร์กอยู่ใน:
- repo: แพลตฟอร์ม/เฟรมเวิร์ก/ฐาน
- ไดเรกทอรี: services/core/java/com/android/server/apphibernation
ตรรกะของนโยบายอยู่ใน:
- repo: แพลตฟอร์ม/แพ็คเกจ/โมดูล/การอนุญาต
- ไดเรกทอรี: PermissionController/src/com/android/permissioncontroller/hibernation
สถาปัตยกรรมระดับสูง
บริการระบบ App 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 เพื่อให้แน่ใจว่าเข้ากันได้แบบย้อนหลัง มีการสลับโหมดไฮเบอร์เนตในหน้าแอพภายใต้ แอพและการแจ้งเตือน ใน การตั้งค่า ในขณะที่ยังคงการสลับการเพิกถอนอัตโนมัติดั้งเดิมภายในเมนูย่อยการ อนุญาต การสลับนี้จะควบคุมการยกเว้นระบบ App Hibernation โดยรวมสำหรับแอป
การปรับแต่ง
เนื่องจากการใช้งานบางส่วนเป็นส่วนหนึ่งของส่วนประกอบของระบบโมดูลาร์ พันธมิตรจึงไม่แนะนำให้แก้ไขคุณลักษณะนี้ พันธมิตรสามารถใช้คุณลักษณะ/ฟังก์ชันที่คล้ายคลึงกันแทนได้ตราบเท่าที่ปฏิบัติตามข้อกำหนดของ CDD
การไฮเบอร์เนตของแอปควรเปิดเป็นค่าเริ่มต้นสำหรับแอปทั้งหมดที่กำหนดเป้าหมายเป็น Android 11 ขึ้นไป สิ่งนี้เหมือนกับการเพิกถอนการอนุญาตอัตโนมัติ แม้ว่าการตั้งค่าอาจเปิดอยู่ แต่การใช้งานโหมดไฮเบอร์เนตของแอปอาจแตกต่างกันระหว่างแอปที่กำหนดเป้าหมายเป็น Android 11 กับ Android 12 โดยเฉพาะอย่างยิ่ง การไฮเบอร์เนตของแอปจะใช้ได้กับแอปที่กำหนดเป้าหมายเป็น Android 11 เท่านั้น ในขณะที่แอปที่กำหนดเป้าหมายเป็น Android 12 เป็นเพียงการเพิกถอนอัตโนมัติโดยอัตโนมัติ
นอกจากนี้ OEM อาจใช้คุณลักษณะที่คล้ายคลึงกัน อย่างไรก็ตาม คุณลักษณะเหล่านี้กำหนดเป้าหมายในช่วงเวลาที่สั้นกว่ามากสำหรับการปรับแบตเตอรี่ให้เหมาะสม ซึ่งสามารถเป็นแบบเฉพาะของ OEM ได้ คุณลักษณะการจำกัดแอปที่คล้ายคลึงกันซึ่งพัฒนาโดย OEM สามารถอยู่ร่วมกับระบบ App Hibernation ได้ตราบเท่าที่มีคุณสมบัติตรงตามเกณฑ์ที่กำหนดไว้ใน CDD
การทดสอบ
การไฮเบอร์เนตของแอปมีการทดสอบ CTS และหน่วยเพื่อให้แน่ใจว่าทำงานอย่างถูกต้อง
- AutoRevokeTest
- AppHibernationIntegrationTest