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