ผู้ใช้ 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