App ไฮเบอร์เนต

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

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

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

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

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

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

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

  • repo: แพลตฟอร์ม/แพ็คเกจ/โมดูล/การอนุญาต
  • ไดเรกทอรี: PermissionController/src/com/android/permissioncontroller/hibernation

สถาปัตยกรรมระดับสูง

บริการระบบ App 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 สามารถอยู่ร่วมกับระบบ App Hibernation ได้ ตราบใดที่มีคุณสมบัติตรงตามเกณฑ์ที่มีอยู่ซึ่งกำหนดไว้ใน CDD

การทดสอบ

การไฮเบอร์เนตของแอปมี CTS และการทดสอบหน่วยเพื่อให้แน่ใจว่าทำงานได้อย่างถูกต้อง