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

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

Bucket ที่มีลำดับความสำคัญ

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

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

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

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

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

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

ใช้งานอยู่

แอปจะอยู่ใน Bucket ใช้งานอยู่ ขณะที่แอปถูกใช้งาน เพิ่งถูกใช้งานเมื่อเร็วๆ นี้ หรือเมื่อแอปดำเนินการอย่างใดอย่างหนึ่งต่อไปนี้

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

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

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

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

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

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

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

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

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

ชุดการทำงาน

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

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

บ่อย

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

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

พบน้อย

แอปจะอยู่ใน Bucket พบน้อย หากไม่มีการใช้งานบ่อย เช่น แอปโรงแรมที่ผู้ใช้เรียกใช้งานเฉพาะขณะเข้าพักที่โรงแรมนั้นๆ อาจอยู่ใน Bucket "พบน้อย"

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

ถูกจำกัด

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

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

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

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

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

การยกเว้นจาก Bucket "ถูกจำกัด"

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

ประเมิน Bucket ที่มีลำดับความสำคัญ

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

  • เรียก getAppStandbyBucket()

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

    adb shell am get-standby-bucket PACKAGE_NAME

ระบบจะควบคุมแอปของคุณเมื่อใดก็ตามที่แอปถูกนำไปไว้ใน App Standby Bucket ที่มีค่ามากกว่า STANDBY_BUCKET_ACTIVE (10)

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

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

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

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

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