ผู้ใช้ Android โดยเฉลี่ยจะติดตั้งแอปมากกว่า 50 แอปในอุปกรณ์ (จำนวนจะเพิ่มขึ้นตามระดับ RAM ของอุปกรณ์) อย่างไรก็ตาม แอปจํานวนมากเหล่านี้ไม่มีผู้ใช้ใช้งานเป็นระยะเวลานาน
การทำให้เป็นช่วงพักของแอปจะหยุดแอปที่ผู้ใช้ไม่ได้ใช้งานเป็นเวลา 2-3 เดือน คล้ายกับการเพิกถอนสิทธิ์อัตโนมัติ ซึ่งจะบังคับให้แอปหยุดทำงานและทำให้แอปอยู่ในสถานะที่เราจะเพิ่มประสิทธิภาพเพื่อพื้นที่เก็บข้อมูลแทนประสิทธิภาพ การเพิกถอนสิทธิ์โดยอัตโนมัติจะรวมอยู่ในสถานะนี้ด้วยและแชร์การตั้งค่าการยกเว้นเดียวกันในการตั้งค่า แอปที่หยุดอย่างแรงจะไม่ทำงานหรือส่งการแจ้งเตือนในเบื้องหลัง และไม่สามารถส่งข้อความ Push เมื่อผู้ใช้ใช้แอปอีกครั้ง แอปจะออกจากโหมดพักและทำงาน/การแจ้งเตือนตามปกติ งาน/การแจ้งเตือน/การแจ้งเตือนที่ตั้งเวลาไว้ก่อนที่แอปจะเข้าสู่โหมดพักเครื่องจะต้องได้รับการตั้งเวลาใหม่
การแก้ไขแพลตฟอร์มของ OEM อาจขัดแย้งกับการใช้งานโหมดพักของแอป เช่น
- การแก้ไขคำจำกัดความของการใช้งานแอปหรือแนะนำวิธีปลุกแอปที่ไม่ได้อยู่ใน AOSP อาจรบกวนความแม่นยำของโหมดพักของแอป
- กลไกการจำกัดที่เป็นกรรมสิทธิ์ของ OEM ซึ่งคล้ายกับการพักแอปอาจทำงานเพื่อวัตถุประสงค์ที่คล้ายกัน แม้ว่าทั้ง 2 รายการจะมีอยู่ได้ แต่อาจมีการทับซ้อนกันบ้าง
CDD ระบุข้อกําหนดชุดใหม่สําหรับการเปลี่ยนแปลงที่อิงตามการใช้งานแอป ซึ่งคล้ายกับข้อกําหนดที่มีอยู่ในส่วน3.5.1 การทำให้เป็นช่วงพักของแอปเป็นไปตามข้อกำหนดต่อไปนี้
โค้ดเฟรมเวิร์กอยู่ในตำแหน่งต่อไปนี้
- repo: platform/frameworks/base
- ไดเรกทอรี: services/core/java/com/android/server/apphibernation
ตรรกะนโยบายจะอยู่ในตำแหน่งต่อไปนี้
- repo: platform/packages/modules/Permission
- ไดเรกทอรี: 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 และ Unit Test เพื่อให้แน่ใจว่าแอปทำงานได้อย่างถูกต้อง
AutoRevokeTest
AppHibernationIntegrationTest