การพักใช้งานแอป

ผู้ใช้ Android โดยเฉลี่ยจะติดตั้งแอปมากกว่า 50 แอปในอุปกรณ์ (จำนวนจะเพิ่มขึ้นเมื่อระดับ RAM ของอุปกรณ์เพิ่มขึ้น) อย่างไรก็ตาม ผู้ใช้ไม่ได้ใช้แอปเหล่านี้จำนวนมากเป็นเวลานาน

การพักแอปจะพักแอปที่ผู้ใช้ไม่ได้ใช้งานเป็นเวลา 2-3 เดือน ซึ่งคล้ายกับการเพิกถอนสิทธิ์อัตโนมัติ การดำเนินการนี้จะบังคับให้แอปหยุดทำงานและเปลี่ยนสถานะเป็นสถานะที่เราเพิ่มประสิทธิภาพเพื่อการจัดเก็บแทนที่จะเป็นประสิทธิภาพ การเพิกถอนสิทธิ์อัตโนมัติจะรวมอยู่ในสถานะนี้ด้วย และทั้ง 2 อย่างจะใช้การตั้งค่าการยกเว้นเดียวกันในการตั้งค่า แอปที่ถูกบังคับให้หยุดทำงานจะไม่เรียกใช้ งานหรือการแจ้งเตือนในเบื้องหลัง และไม่สามารถส่งการแจ้งเตือนแบบพุชได้ เมื่อผู้ใช้ใช้แอปอีกครั้ง แอปจะออกจากโหมดไฮเบอร์เนตและ งาน/การแจ้งเตือน/การแจ้งเตือนจะทำงานอีกครั้งตามปกติ งาน/การแจ้งเตือน/การแจ้งเตือน ที่กำหนดเวลาไว้ก่อนที่แอปจะเข้าสู่โหมดไฮเบอร์เนตจะต้อง กำหนดเวลาใหม่

OEM ที่แก้ไขแพลตฟอร์มอาจขัดแย้งกับการใช้งานการจำศีลของแอป เช่น

  • การแก้ไขคำจำกัดความการใช้งานแอปหรือการนำวิธีปลุกแอปที่ไม่ได้อยู่ใน AOSP มาใช้ อาจขัดขวางความแม่นยำของการจำศีลของแอป
  • กลไกการจำกัดที่เป็นกรรมสิทธิ์ของ OEM ซึ่งคล้ายกับการจำศีลของแอปอาจ มีวัตถุประสงค์คล้ายกัน แม้ว่าทั้ง 2 อย่างจะอยู่ร่วมกันได้ แต่ก็อาจมีการทับซ้อนกันบ้าง

CDD ระบุข้อกำหนดชุดใหม่สำหรับการเปลี่ยนแปลงที่อิงตามการใช้งานแอป ซึ่งคล้ายกับข้อกำหนด 3.5.1 ที่มีอยู่ การพักแอปจะเป็นไปตามข้อกำหนดต่อไปนี้

โค้ดเฟรมเวิร์กจะอยู่ใน

ตรรกะของนโยบายจะอยู่ในส่วนต่อไปนี้

  • 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 และการทดสอบหน่วยเพื่อให้มั่นใจว่าแอปทำงานได้อย่างถูกต้อง