ที่เก็บข้อมูลสแตนด์บายแอป

Android 9 (ระดับ API 28) ขึ้นไปรองรับที่เก็บข้อมูลสแตนด์บายแอป บัケットสแตนด์บายแอปช่วยให้ระบบจัดลำดับความสำคัญของคำขอทรัพยากรของแอปตามความถี่และระยะเวลาที่ใช้แอปครั้งล่าสุด ระบบจะจัดแอปแต่ละแอปไว้ในกลุ่มลำดับความสำคัญ 1 ใน 5 กลุ่มตามรูปแบบการใช้งานแอป ระบบจะจำกัดทรัพยากรของอุปกรณ์ที่แอปแต่ละแอปใช้ได้ตามที่เก็บที่แอปนั้นอยู่

ที่เก็บข้อมูลตามลำดับความสำคัญ

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

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

กลุ่มลำดับความสำคัญมีดังนี้

  • ใช้งานอยู่: มีการใช้งานแอปอยู่หรือเพิ่งมีการใช้งานเมื่อเร็วๆ นี้
  • ชุดที่ใช้งานอยู่: มีการใช้งานแอปเป็นประจำ
  • บ่อย: มีการใช้แอปบ่อยครั้งแต่ไม่ได้ใช้ทุกวัน
  • Rare: แอปที่ใช้ไม่บ่อย
  • จำกัด: แอปใช้ทรัพยากรระบบจำนวนมากหรืออาจมีลักษณะการทำงานที่ไม่พึงประสงค์

นอกจากที่เก็บข้อมูลตามลำดับความสำคัญเหล่านี้แล้ว ยังมีที่เก็บข้อมูลไม่เคยแบบพิเศษสำหรับแอปที่ติดตั้งไว้แต่ไม่เคยเรียกใช้ ระบบจะกำหนดข้อจำกัดที่เข้มงวดกับแอปเหล่านี้

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

ใช้งานอยู่

แอปจะอยู่ในที่เก็บใช้งานอยู่ขณะที่มีการใช้งาน เพิ่งมีการใช้งาน หรือเมื่อทำสิ่งต่อไปนี้

  • เปิดกิจกรรม
  • เรียกใช้บริการที่ทำงานอยู่เบื้องหน้าเป็นเวลานาน
  • ผู้ใช้แตะจากการแจ้งเตือน

หากแอปอยู่ในที่เก็บข้อมูลที่ใช้งานอยู่ ระบบจะจำกัดงานหรือการปลุกของแอปให้น้อยที่สุด ดังนี้

  • ตั้งแต่ Android 16 (ระดับ API 36) เป็นต้นไป งานที่ทำงานอยู่เบื้องหลังจะมีโควต้ารันไทม์ที่เพียงพอหากเริ่มโดยแอปในที่เก็บข้อมูลที่ใช้งานอยู่ ซึ่งรวมถึงงานที่กำหนดเวลาโดยตรงด้วย JobScheduler รวมถึงงานที่สร้างโดยไลบรารีอื่นๆ เช่น WorkManager หรือ DownloadManager

การโต้ตอบของผู้ใช้จะกำหนดให้แอปเป็น "ใช้งานอยู่"

ใน Android 9 (ระดับ API 28) ขึ้นไป เมื่อผู้ใช้โต้ตอบกับแอปของคุณในลักษณะบางอย่าง ระบบจะวางแอปของคุณไว้ในที่เก็บข้อมูลที่ใช้งานอยู่ชั่วคราว หลังจากที่ผู้ใช้หยุดโต้ตอบกับแอป ระบบจะนำแอปไปไว้ในที่เก็บข้อมูลตามประวัติการใช้งาน

ตัวอย่างการโต้ตอบที่ทริกเกอร์ลักษณะการทำงานของระบบนี้มีดังนี้

  • ผู้ใช้แตะการแจ้งเตือนที่แอปของคุณส่ง

  • ผู้ใช้โต้ตอบกับบริการที่ทำงานอยู่เบื้องหน้าในแอปโดยแตะปุ่มสื่อ

  • ผู้ใช้เชื่อมต่อกับแอปของคุณขณะโต้ตอบกับ Android Automotive OS โดยที่แอปใช้บริการที่ทำงานอยู่เบื้องหน้าหรือ CONNECTION_TYPE_PROJECTION

ชุดการทำงาน

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

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

ติดต่อบ่อย

แอปจะอยู่ในที่เก็บใช้บ่อยหากมีการใช้งานเป็นประจำ แต่ไม่จำเป็นต้องใช้ทุกวัน ตัวอย่างเช่น แอปติดตามการออกกำลังกายที่ผู้ใช้เปิดใช้ที่ยิมอาจอยู่ในที่เก็บข้อมูล "บ่อย"

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

พบน้อย

แอปจะอยู่ในที่เก็บไม่บ่อยหากไม่ได้ใช้บ่อยนัก ตัวอย่างเช่น แอปโรงแรมที่ผู้ใช้เรียกใช้เฉพาะขณะเข้าพักที่โรงแรมนั้นอาจอยู่ในที่เก็บข้อมูลแบบไม่ค่อยใช้

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

จำกัด

ที่เก็บนี้เพิ่มเข้ามาใน Android 12 (ระดับ API 31) โดยมีลำดับความสำคัญต่ำสุดและข้อจำกัดสูงสุดในบรรดาที่เก็บทั้งหมด ระบบจะพิจารณาพฤติกรรมของแอป เช่น ความถี่ที่ผู้ใช้โต้ตอบกับแอป เพื่อตัดสินใจว่าจะนำแอปไปไว้ใน Bucket ที่ถูกจำกัดหรือไม่

ใน Android 13 (API ระดับ 33) ขึ้นไป ระบบจะนำแอปของคุณไปไว้ใน Bucket ที่ถูกจำกัดในสถานการณ์ต่อไปนี้ เว้นแต่แอปจะมีคุณสมบัติตรงตามเกณฑ์การยกเว้น

  • ผู้ใช้ไม่ได้โต้ตอบกับแอปของคุณเป็นเวลาหลายวัน ใน Android 12 (ระดับ API 31) และ 12L (ระดับ API 32) จำนวนวันคือ 45 วัน Android 13 ลดจำนวนวันลงเหลือ 8 วัน

  • แอปของคุณเรียกใช้การออกอากาศหรือการเชื่อมโยงมากเกินไปในช่วงระยะเวลา 24 ชั่วโมง

หากระบบนำแอปของคุณไปไว้ในที่เก็บข้อมูลที่ถูกจำกัด จะมีข้อจำกัดต่อไปนี้

  • คุณสามารถเรียกใช้งานได้วันละครั้งในเซสชันแบบกลุ่ม 10 นาที ในระหว่างเซสชันนี้ ระบบจะจัดกลุ่มงานของแอปคุณกับงานของแอปอื่นๆ
    • งานที่ถูกจำกัดจะไม่ทำงานด้วยตัวเอง ต้องมีงานอื่นอย่างน้อย 1 งานที่กำลังทำงานอยู่หรือรอดำเนินการในเวลาเดียวกัน ซึ่งอาจรวมถึงงานอื่นๆ ด้วย
  • แอปของคุณจะเรียกใช้งานด่วนได้น้อยลงเมื่อเทียบกับกรณีที่ระบบนำแอปไปไว้ใน Bucket ที่มีข้อจำกัดน้อยกว่า
  • แอปของคุณเรียกใช้การปลุกได้ 1 ครั้งต่อวัน การปลุกนี้อาจเป็นสัญญาณปลุกเจาะจงหรือการปลุกแบบไม่เจาะจงก็ได้

การยกเว้นจากที่เก็บข้อมูลที่ถูกจำกัด

แอปประเภทต่อไปนี้ได้รับการยกเว้นไม่ให้เข้าสู่ที่เก็บข้อมูลที่ถูกจำกัดและข้ามทริกเกอร์การไม่มีการใช้งาน แม้จะอยู่ใน Android 12 ขึ้นไปก็ตาม

ประเมินที่เก็บข้อมูลลำดับความสำคัญ

หากต้องการตรวจสอบว่าแอปของคุณได้รับการกำหนดให้อยู่ในที่เก็บข้อมูลใด ให้ทำอย่างใดอย่างหนึ่งต่อไปนี้

  • โทร getAppStandbyBucket()

  • เรียกใช้คำสั่งต่อไปนี้ในหน้าต่างเทอร์มินัล

    adb shell am get-standby-bucket PACKAGE_NAME

ระบบจะจำกัดปริมาณการใช้งานแอปเมื่อใดก็ตามที่แอปอยู่ในที่เก็บสแตนด์บายแอปซึ่งมีค่ามากกว่า STANDBY_BUCKET_ACTIVE (10)

แนวทางปฏิบัติแนะนำ

หากแอปของคุณทำตามแนวทางปฏิบัติแนะนำสำหรับโหมด Doze และสแตนด์บายแอป ฟีเจอร์การจัดการพลังงานในภายหลังก็ไม่ใช่เรื่องยาก อย่างไรก็ตาม ลักษณะการทำงานบางอย่างของแอปที่เคยทำงานได้ดีอาจทำให้เกิดปัญหาได้

  • อย่าพยายามจัดการระบบเพื่อให้แอปของคุณอยู่ในที่เก็บข้อมูลบางอย่าง วิธีการจัดลำดับความสำคัญของระบบอาจเปลี่ยนแปลงได้ และผู้ผลิตอุปกรณ์ทุกรายอาจเลือกเขียนแอปจัดกลุ่มของตนเองด้วยอัลกอริทึมของตนเอง แต่ให้ตรวจสอบว่าแอปทำงานอย่างเหมาะสมไม่ว่าจะอยู่ในที่เก็บข้อมูลใดก็ตาม
  • หากแอปไม่มีกิจกรรม Launcher ระบบอาจไม่เลื่อนแอปไปยังที่เก็บข้อมูลที่ใช้งานอยู่ ลองออกแบบแอปใหม่ให้มีกิจกรรมดังกล่าว
  • หากผู้ใช้โต้ตอบกับการแจ้งเตือนของแอปไม่ได้ ผู้ใช้จะไม่สามารถเรียกให้แอปเลื่อนไปยังที่เก็บข้อมูลที่ใช้งานอยู่ ในกรณีนี้ ให้พิจารณาออกแบบการแจ้งเตือนบางรายการใหม่เพื่อให้ผู้ใช้โต้ตอบได้ ดูหลักเกณฑ์บางส่วนได้ที่รูปแบบการออกแบบการแจ้งเตือนของ Material Design

  • หากแอปไม่แสดงการแจ้งเตือนเมื่อได้รับข้อความ RemoteNotification Firebase Cloud Messaging (FCM) ผู้ใช้จะโต้ตอบกับแอปไม่ได้ และทำให้แอปไม่ได้รับการเลื่อนสถานะเป็นกลุ่มที่ใช้งานอยู่ อันที่จริงแล้ว การใช้งาน RemoteNotification เพียงอย่างเดียวที่ตั้งใจไว้คือการพุชการแจ้งเตือนไปยังผู้ใช้ ดังนั้นสถานการณ์นี้จึงต้องไม่เกิดขึ้น มีการบังคับใช้นโยบายสำหรับการใช้ข้อความประเภทเหล่านี้ ซึ่งก็คือกรอบเวลาการดำเนินการ 20 วินาทีที่กลับไปใช้การแจ้งเตือนเดิม จะไม่มีการบังคับใช้หากแอปทำงานอยู่เบื้องหน้าหรือผู้ใช้อนุญาตให้ทำงานอยู่เบื้องหลัง

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