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

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

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

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

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

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

โค้ดเฟรมเวิร์กอยู่ในตำแหน่งต่อไปนี้

ตรรกะนโยบายจะอยู่ในตำแหน่งต่อไปนี้

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