App ไฮเบอร์เนต

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

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

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

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

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

รหัสเฟรมเวิร์กอยู่ใน:

ตรรกะของนโยบายอยู่ใน:

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