Android 9 (API ระดับ 28) ขึ้นไปรองรับกลุ่มการทำงานของแอปในโหมดสแตนด์บาย App Standby Buckets ช่วยให้ระบบจัดลำดับความสำคัญของคำขอทรัพยากรของแอปตามความถี่และระยะเวลาที่ใช้แอป ล่าสุด ระบบจะจัดวางแอปแต่ละแอปไว้ในกลุ่มลำดับความสำคัญ 5 กลุ่มตามรูปแบบการใช้งานแอป ระบบจะจำกัดทรัพยากรของอุปกรณ์ ที่พร้อมใช้งานสำหรับแต่ละแอปตามที่เก็บข้อมูลที่แอปอยู่
ที่เก็บข้อมูลที่มีลำดับความสำคัญ
ระบบจะกำหนดแอปแต่ละแอปแบบไดนามิกให้กับกลุ่มที่มีลำดับความสำคัญ และกำหนดแอปใหม่ตามความจำเป็น ระบบอาจใช้แอปที่โหลดไว้ล่วงหน้าซึ่งใช้แมชชีนเลิร์นนิงเพื่อพิจารณาว่ามีแนวโน้มที่จะใช้แอปแต่ละแอปมากน้อยเพียงใด และกำหนดแอปให้กับกลุ่มที่เหมาะสม
หากไม่มีแอปของระบบในอุปกรณ์ ระบบจะเรียงแอปตามค่าเริ่มต้น โดยพิจารณาจากเวลาที่ใช้แอปครั้งล่าสุด ระบบจะกำหนดแอปที่มีการใช้งานมากกว่าให้ อยู่ในกลุ่มที่มีลำดับความสำคัญสูงกว่า ซึ่งจะทำให้แอปมีทรัพยากรของระบบมากขึ้น โดยเฉพาะอย่างยิ่ง กลุ่มจะกำหนดความถี่ที่งานของแอปทำงานและความถี่ที่แอปสามารถทริกเกอร์การปลุก ข้อจำกัดเหล่านี้ จะมีผลเฉพาะในขณะที่อุปกรณ์ใช้พลังงานแบตเตอรี่ ขณะที่อุปกรณ์กำลังชาร์จ ระบบจะไม่บังคับใช้ข้อจำกัดเหล่านี้
กลุ่มลำดับความสำคัญมีดังนี้
- ใช้งานอยู่: มีการใช้แอปหรือใช้เมื่อเร็วๆ นี้
- ชุดการทำงาน: แอปมีการใช้งานเป็นประจำ
- บ่อยครั้ง: ใช้แอปบ่อย แต่ไม่ใช่ทุกวัน
- ไม่ค่อยได้ใช้: ไม่ได้ใช้แอปบ่อยนัก
- ถูกจำกัด: แอปใช้ทรัพยากรของระบบจำนวนมากหรืออาจแสดงลักษณะการทำงานที่ไม่พึงประสงค์
นอกจากกลุ่มที่มีลำดับความสำคัญเหล่านี้แล้ว ยังมีกลุ่มไม่เคยพิเศษสำหรับ แอปที่ติดตั้งแต่ไม่เคยเรียกใช้ ระบบจะกำหนดข้อจำกัดที่เข้มงวดกับแอปเหล่านี้
คำอธิบายต่อไปนี้ใช้สำหรับกรณีที่ไม่ใช่การคาดการณ์ ในทางตรงกันข้าม เมื่อการคาดการณ์ใช้แมชชีนเลิร์นนิงเพื่อคาดการณ์พฤติกรรม ระบบจะเลือกกลุ่มโดยคาดการณ์การกระทําถัดไปของผู้ใช้แทนที่จะอิงตามการใช้งานล่าสุด ตัวอย่างเช่น แอปที่ใช้ล่าสุดอาจอยู่ในกลุ่มที่ใช้งานไม่บ่อยเนื่องจากแมชชีนเลิร์นนิงคาดการณ์ว่าผู้ใช้อาจไม่ได้ใช้แอปเป็นเวลาหลายชั่วโมง
ใช้งานอยู่
แอปจะอยู่ในกลุ่มใช้งานอยู่ขณะที่ใช้งาน มีการใช้งานเมื่อเร็วๆ นี้ หรือ เมื่อแอปทําสิ่งต่อไปนี้
- เปิดใช้กิจกรรม
- เรียกใช้บริการที่ทำงานอยู่เบื้องหน้าเป็นเวลานาน
- ผู้ใช้แตะจากการแจ้งเตือน
หากแอปอยู่ในที่เก็บข้อมูลที่ใช้งานอยู่ ระบบจะจำกัดงานหรือการปลุกของแอปให้น้อยที่สุด ดังนี้
- ตั้งแต่ Android 16 (API ระดับ 36) เป็นต้นไป งานในเบื้องหลังจะมี
โควต้าเวลาทำงานที่มากพอหากแอปในกลุ่มที่ใช้งานอยู่เป็นผู้เริ่มงาน
ซึ่งรวมถึงงานที่กำหนดเวลาโดยตรงด้วย
JobScheduler
รวมถึง งานที่สร้างโดยไลบรารีอื่นๆ เช่น WorkManager หรือDownloadManager
การโต้ตอบของผู้ใช้จะกำหนดให้แอปเป็นแอปที่ใช้งานอยู่
ใน Android 9 (API ระดับ 28) ขึ้นไป เมื่อผู้ใช้โต้ตอบกับแอปของคุณใน บางวิธี ระบบจะจัดวางแอปของคุณไว้ในกลุ่มที่ใช้งานอยู่ชั่วคราว หลังจากที่ผู้ใช้หยุดโต้ตอบกับแอปแล้ว ระบบจะนำแอปไปไว้ใน ที่เก็บข้อมูลตามประวัติการใช้งาน
ตัวอย่างของการโต้ตอบที่ทําให้เกิดลักษณะการทํางานของระบบนี้มีดังนี้
ผู้ใช้แตะการแจ้งเตือนที่แอปของคุณส่ง
ผู้ใช้โต้ตอบกับบริการที่ทำงานอยู่เบื้องหน้าในแอปโดยแตะปุ่มสื่อ
ผู้ใช้เชื่อมต่อกับแอปของคุณขณะโต้ตอบกับ Android Automotive OS ซึ่งแอปของคุณใช้บริการที่ทำงานอยู่เบื้องหน้าหรือ
CONNECTION_TYPE_PROJECTION
ชุดการทำงาน
แอปจะอยู่ในกลุ่มชุดการทำงานหากทำงานบ่อยแต่ไม่ได้ใช้งานอยู่ ตัวอย่างเช่น แอปโซเชียลมีเดียที่ผู้ใช้เปิดเกือบทุกวันมีแนวโน้มที่จะ อยู่ในชุดการทำงาน นอกจากนี้ ระบบยังโปรโมตแอปไปยังที่เก็บข้อมูลชุดการทำงานด้วยในกรณีต่อไปนี้ หากมีการใช้แอปโดยอ้อม
หากแอปอยู่ในชุดการทำงาน ระบบจะกำหนดข้อจำกัดเล็กน้อยเกี่ยวกับความสามารถของแอป ในการเรียกใช้ Job และทริกเกอร์การปลุก โปรดดูรายละเอียดที่หัวข้อการจัดการพลังงาน การจำกัดทรัพยากร
ติดต่อบ่อย
แอปจะอยู่ในกลุ่มใช้งานบ่อยหากมีการใช้งานเป็นประจำ แต่ไม่จำเป็นต้องใช้งานทุกวัน เช่น แอปติดตามการออกกำลังกายที่ผู้ใช้เรียกใช้ในยิม อาจอยู่ในกลุ่มที่ใช้บ่อย
หากแอปอยู่ในที่เก็บข้อมูลที่ใช้บ่อย ระบบจะกำหนดข้อจำกัดที่เข้มงวดมากขึ้นเกี่ยวกับ ความสามารถในการเรียกใช้ Job และทริกเกอร์การปลุก โปรดดูรายละเอียดที่หัวข้อการจัดการพลังงาน การจำกัดทรัพยากร
พบน้อย
แอปจะอยู่ในกลุ่มไม่ค่อยได้ใช้หากไม่ได้ใช้งานบ่อย ตัวอย่างเช่น แอปโรงแรมที่ผู้ใช้เรียกใช้ขณะเข้าพักที่โรงแรมนั้นเท่านั้นอาจอยู่ในกลุ่มที่ใช้งานน้อย
หากแอปอยู่ในที่เก็บข้อมูลที่ใช้งานน้อย ระบบจะกำหนดข้อจำกัดที่เข้มงวดเกี่ยวกับความสามารถในการเรียกใช้ งานและทริกเกอร์การปลุกของแอป ระบบยังจำกัดความสามารถของแอป ในการเชื่อมต่ออินเทอร์เน็ตด้วย โปรดดูรายละเอียดที่หัวข้อการจัดการพลังงาน การจำกัดทรัพยากร
จำกัด
ที่เก็บข้อมูลนี้ซึ่งเพิ่มเข้ามาใน Android 12 (API ระดับ 31) มีลำดับความสำคัญต่ำสุดและมีข้อจำกัดสูงสุดในบรรดาที่เก็บข้อมูลทั้งหมด ระบบจะพิจารณาพฤติกรรมของแอป เช่น ความถี่ที่ผู้ใช้โต้ตอบกับแอป เพื่อตัดสินใจว่าจะนำแอปไปไว้ในที่เก็บข้อมูลที่ถูกจำกัดหรือไม่
ใน Android 13 (API ระดับ 33) ขึ้นไป ระบบจะนำแอปของคุณไปไว้ในที่เก็บข้อมูลที่ถูกจำกัดในสถานการณ์ต่อไปนี้ เว้นแต่แอปจะมีคุณสมบัติได้รับการยกเว้น
ผู้ใช้ไม่ได้โต้ตอบกับแอปของคุณเป็นเวลาจำนวนวันที่เฉพาะ ใน Android 12 (API ระดับ 31) และ 12L (API ระดับ 32) จำนวนวัน คือ 45 วัน Android 13 ลดจำนวนวันลงเหลือ 8 วัน
แอปของคุณเรียกใช้การออกอากาศหรือการเชื่อมโยงมากเกินไป ในช่วง 24 ชั่วโมง
หากระบบนำแอปของคุณไปไว้ในที่เก็บข้อมูลที่ถูกจำกัด จะมีข้อจำกัดต่อไปนี้
- คุณเรียกใช้งานได้วันละครั้งในเซสชันแบบเป็นกลุ่ม 10 นาที ในระหว่างเซสชันนี้ ระบบจะจัดกลุ่มงานของแอปกับงานของแอปอื่นๆ
- งานที่ถูกจำกัดจะไม่ทำงานด้วยตัวเอง ต้องมีงานอื่นอย่างน้อย 1 งานที่กำลังทำงานหรือรอดำเนินการในเวลาเดียวกัน ซึ่งอาจรวมถึงงานอื่นๆ
- แอปของคุณจะเรียกใช้งานเร่งด่วนได้น้อยลงเมื่อเทียบกับกรณีที่ระบบ นำแอปของคุณไปไว้ในที่เก็บข้อมูลที่มีข้อจำกัดน้อยกว่า
- แอปของคุณเรียกใช้การปลุกได้ 1 ครั้งต่อวัน โดยการปลุกนี้อาจเป็นการปลุกที่แน่นอนหรือการปลุกที่ไม่แน่นอน
ข้อยกเว้นจากที่เก็บข้อมูลที่ถูกจำกัด
แอปประเภทต่อไปนี้จะได้รับการยกเว้นไม่ต้องเข้าสู่กลุ่มที่ถูกจำกัดและ ข้ามทริกเกอร์การไม่มีกิจกรรม แม้จะอยู่ใน Android 12 ขึ้นไปก็ตาม
- แอปอุปกรณ์ที่ใช้ร่วมกัน
- แอปที่ทำงานในอุปกรณ์ในโหมดสาธิต
- แอปเจ้าของอุปกรณ์
- แอปของเจ้าของโปรไฟล์
- แอปที่ทำงานตลอดเวลา
- แอป VPN
- แอปที่มีบทบาท
ROLE_DIALER
- แอปที่ผู้ใช้กำหนดอย่างชัดเจนให้มีฟังก์ชันการทำงานแบบ "ไม่จำกัด" ในการตั้งค่าระบบ
- แอปที่มีวิดเจ็ตที่ใช้งานอยู่
- แอปที่ได้รับสิทธิ์ต่อไปนี้อย่างน้อย 1 รายการ
ประเมินกลุ่มลำดับความสำคัญ
หากต้องการตรวจสอบว่าระบบกำหนดแอปของคุณไว้ในกลุ่มใด ให้ทำอย่างใดอย่างหนึ่งต่อไปนี้
โทรหา
getAppStandbyBucket()
เรียกใช้คำสั่งต่อไปนี้ในหน้าต่างเทอร์มินัล
adb shell am get-standby-bucket PACKAGE_NAME
ระบบจะจำกัดอัตราการใช้งานแอปทุกครั้งที่แอปอยู่ในที่เก็บข้อมูลสแตนด์บายแอป
ที่มีค่ามากกว่า STANDBY_BUCKET_ACTIVE
(10)
แนวทางปฏิบัติแนะนำ
หากแอปของคุณทำตามแนวทางปฏิบัติแนะนำสำหรับ Doze และสแตนด์บายแอป ฟีเจอร์การจัดการพลังงานในภายหลังก็จะไม่ใช่เรื่องยาก อย่างไรก็ตาม พฤติกรรมของแอปบางอย่าง ซึ่งก่อนหน้านี้ทำงานได้ดีอาจทำให้เกิดปัญหาได้
- อย่าพยายามจัดการระบบเพื่อนำแอปของคุณไปไว้ในที่เก็บข้อมูลใดที่เก็บข้อมูลหนึ่ง วิธีการจัดลําดับความสําคัญของระบบอาจเปลี่ยนแปลงได้ และผู้ผลิตอุปกรณ์ทุกรายอาจเลือกที่จะเขียนแอปการจัดกลุ่มของตนเองด้วยอัลกอริทึมของตนเอง แต่ให้ตรวจสอบว่าแอปทำงานอย่างเหมาะสมไม่ว่าจะอยู่ในกลุ่มใดก็ตาม
- หากแอปไม่มีกิจกรรมตัวเรียกใช้ ระบบอาจไม่เลื่อนระดับแอปไปที่ กลุ่มที่ใช้งานอยู่เลย ลองออกแบบแอปใหม่ให้มีกิจกรรมดังกล่าว
หากผู้ใช้โต้ตอบกับการแจ้งเตือนของแอปไม่ได้ ผู้ใช้จะ ทริกเกอร์การเลื่อนระดับของแอปไปยังกลุ่มที่ใช้งานอยู่ไม่ได้ ในกรณีนี้ ให้พิจารณา ออกแบบการแจ้งเตือนบางอย่างใหม่เพื่อให้ผู้ใช้โต้ตอบได้ ดูหลักเกณฑ์บางอย่างได้ที่รูปแบบการออกแบบการแจ้งเตือนของ Material Design
หากแอปไม่แสดงการแจ้งเตือนเมื่อได้รับข้อความ Firebase Cloud Messaging (FCM) ที่มีลำดับความสำคัญสูง ผู้ใช้จะโต้ตอบกับ แอปไม่ได้ และแอปจะไม่ได้รับการเลื่อนไปที่กลุ่มที่ใช้งานอยู่ ในความเป็นจริงแล้ว จุดประสงค์เดียวของการใช้ข้อความ FCM ที่มีลำดับความสำคัญสูงคือการพุชการแจ้งเตือนไปยังผู้ใช้ ดังนั้นจึงไม่ควรเกิดสถานการณ์นี้ขึ้น ใน 12L (API ระดับ 32) และต่ำกว่า หากคุณทําเครื่องหมายข้อความ FCM เป็นลำดับความสำคัญสูงอย่างไม่เหมาะสมเมื่อข้อความไม่ได้กระตุ้นการโต้ตอบของผู้ใช้ อาจทําให้ระบบลดลำดับความสำคัญของข้อความในอนาคต
หากแอปแยกออกเป็นหลายแพ็กเกจ แพ็กเกจเหล่านั้นอาจอยู่ใน ที่เก็บข้อมูลที่ต่างกันและมีระดับการเข้าถึงที่ต่างกัน ทดสอบแอปเหล่านี้ด้วย แพ็กเกจที่กำหนดให้กับที่เก็บข้อมูลต่างๆ เพื่อให้แน่ใจว่าแอปทำงานได้อย่างถูกต้อง