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

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