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

ผู้ใช้ 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 ส่วนหลักๆ ได้แก่

  • การกำหนดเวลาที่แพ็กเกจควรจำศีล
  • การเพิ่มประสิทธิภาพแพ็กเกจที่จำศีล

A new system service, AppHibernationService, and a job service, AppHibernationJobService, inPermissionController จะเป็นตัวควบคุมการตัดสินใจโดยรวม และตรรกะ

UsageStatsService เป็นตัวขับเคลื่อนหลักในการกำหนดเวลาที่แพ็กเกจควรจำศีล และ AppHibernationJobService ใน PermissionController จะเป็นตัวจัดการ ตรรกะของนโยบายนี้อยู่ใน PermissionController เพื่อให้เราอัปเดตผ่าน Mainline ได้แบบไดนามิก นอกจากนี้ เรายังวางแผนที่จะเพิ่มสัญญาณใหม่ ซึ่งก็คือการใช้งานคอมโพเนนต์ เพื่อบันทึกการใช้งานคอมโพเนนต์ของแพ็กเกจ (เช่น บริการ ผู้ให้บริการเนื้อหา) เป็นเมตริกใหม่ใน UsageStatsService

การเพิ่มประสิทธิภาพแพ็กเกจเป็นจุดที่การประหยัดและการเพิ่มประสิทธิภาพจริงทั้งหมดเกิดขึ้น AppHibernationService จะสื่อสารกับส่วนต่างๆ ของระบบเพื่อหยุดแพ็กเกจ ลบข้อมูลแคช ลบอาร์ติแฟกต์ ART และอื่นๆ การเพิกถอนสิทธิ์จะเริ่มต้นจาก AppHibernationJobService โดยตรงเพื่อคงฟังก์ชันการเพิกถอนอัตโนมัติไว้ในอุปกรณ์ Android 11 และอุปกรณ์เวอร์ชันก่อนหน้า

ประสบการณ์ของผู้ใช้

ผู้ใช้จะได้รับทั้งข้อมูลและตัวควบคุมเกี่ยวกับแอปที่สามารถจำศีลได้

ผู้ใช้จะได้รับการแจ้งเตือนเกี่ยวกับแอปที่จำศีล และมีตัวเลือกในการไปที่การตั้งค่าจากการแจ้งเตือนโดยตรงเพื่อเปิดแอปและนำแอปออกจากโหมดจำศีล หรือลบแอปที่ไม่ได้ใช้ออกหากจำเป็น ซึ่งคล้ายกับการเพิกถอนอัตโนมัติ

เรายังคงรองรับความตั้งใจของนักพัฒนาแอปที่ต้องการขอให้ผู้ใช้ยกเว้นแอปจากการพักใช้งานด้วย Intent การยกเว้นการเพิกถอนสิทธิ์อัตโนมัติที่มีอยู่

ความเข้ากันได้แบบย้อนหลัง

ฟีเจอร์เฉพาะของการจำศีลมีให้บริการใน Android 12 เป็นต้นไป ฟีเจอร์นี้ไม่สามารถทำงานในเวอร์ชันก่อนหน้าได้เนื่องจากไม่มีคอมโพเนนต์แพลตฟอร์ม (เช่น บริการของระบบใหม่) การเพิกถอนอัตโนมัติจะยังคงทำงานตามที่ใช้งานสำหรับระบบปฏิบัติการเวอร์ชันก่อนหน้า

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

การปรับแต่ง

การใช้งานบางส่วนเป็นส่วนหนึ่งของคอมโพเนนต์ระบบแบบโมดูลาร์ ดังนั้นเราจึงไม่แนะนำให้พาร์ทเนอร์แก้ไขฟีเจอร์นี้ แต่พาร์ทเนอร์สามารถใช้ฟีเจอร์หรือฟังก์ชันการทำงานที่คล้ายกันได้ตราบใดที่เป็นไปตามข้อกำหนด CDD

การพักใช้งานแอปควรเปิดอยู่โดยค่าเริ่มต้นสำหรับแอปทั้งหมดที่กำหนดเป้าหมายเป็น Android 11 ขึ้นไป ซึ่งเหมือนกับการเพิกถอนสิทธิ์อัตโนมัติ แม้ว่าการตั้งค่าเองอาจเปิดอยู่ แต่การใช้งานการพักใช้งานแอปอาจแตกต่างกันระหว่างแอปที่กำหนดเป้าหมายเป็น Android 11 กับ Android 12 กล่าวคือ การจำศีลของแอปจะทำงานเฉพาะกับแอปที่กำหนดเป้าหมายเป็น Android 11 ในขณะที่แอปที่กำหนดเป้าหมายเป็น Android 12 จะเป็นการเพิกถอนอัตโนมัติโดยพื้นฐาน

นอกจากนี้ OEM อาจใช้ฟีเจอร์ที่คล้ายกัน อย่างไรก็ตาม ฟีเจอร์เหล่านั้นมีกรอบเวลาที่สั้นกว่ามากสำหรับการเพิ่มประสิทธิภาพแบตเตอรี่ ซึ่งอาจเป็นไปตาม OEM ฟีเจอร์การจำกัดแอปที่คล้ายกัน ซึ่งพัฒนาโดย OEM สามารถอยู่ร่วมกับระบบการจำศีลของแอปได้ ตราบใดที่เป็นไปตาม เกณฑ์ที่มีอยู่ซึ่งกำหนดไว้ใน CDD

การทดสอบ

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