การจัดการพลังงาน

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

ฟีเจอร์การจัดการพลังงานแบ่งออกเป็น 2 หมวดหมู่ดังนี้

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

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

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

ที่เก็บข้อมูล 5 รายการจะจัดลําดับความสําคัญของแอปออกเป็นกลุ่มๆ ตามลักษณะต่อไปนี้

ใช้งานอยู่

แอปอยู่ในที่เก็บข้อมูลที่ใช้งานอยู่หากผู้ใช้กำลังใช้แอปสำหรับ ตัวอย่าง:

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

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

ชุดทำงาน

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

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

ติดต่อบ่อย

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

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

พบน้อย

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

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

ไม่ต้อง

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

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

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

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

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

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

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

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

ปรับปรุงโหมดประหยัดแบตเตอรี่

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

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

นอกจากนี้ยังมีการเพิ่มประสิทธิภาพอื่นๆ สำหรับอุปกรณ์โดยเฉพาะ สำหรับแบบเต็ม โปรดดูหน้าที่อธิบายการจัดการพลังงาน ข้อจำกัด

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

การทดสอบและการแก้ปัญหา

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

อย่าลืมทดสอบกรณีการใช้งานหลักของแอปภายใต้เงื่อนไขต่างๆ เพื่อดู วิธีที่ฟีเจอร์การจัดการพลังงานทำงานร่วมกัน คุณสามารถใช้Android คำสั่ง Debug Bridge เพื่อปิด ฟีเจอร์

คำสั่งของ Android Debug Bridge

คุณใช้คำสั่ง Shell Android Debug Bridge ได้ เพื่อทดสอบฟีเจอร์การจัดการพลังงานต่างๆ

สำหรับข้อมูลเกี่ยวกับการใช้ ADB เพื่อวางอุปกรณ์ใน Doze โปรดดู การทดสอบด้วย Doze และสแตนด์บายแอป

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

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

$ adb shell am set-standby-bucket packagename active|working_set|frequent|rare

นอกจากนี้ คุณยังใช้คำสั่งดังกล่าวเพื่อตั้งค่าแพ็กเกจหลายแพ็กเกจพร้อมกันได้ด้วย โดยทำดังนี้

$ adb shell am set-standby-bucket package1 bucket1 package2 bucket2...

หากต้องการตรวจสอบว่าแอปอยู่ในที่เก็บข้อมูลใด ให้เรียกใช้

$ adb shell am get-standby-bucket [packagename]

หากไม่ส่งพารามิเตอร์ packagename คำสั่งจะแสดงรายการ ที่เก็บข้อมูลของแอปทั้งหมด แอปยังดูข้อมูลที่เก็บข้อมูลขณะรันไทม์ได้ด้วยการเรียกใช้ เมธอดใหม่ UsageStatsManager.getAppStandbyBucket()

ประหยัดแบตเตอรี่

มีคำสั่งหลายรายการที่ใช้ทดสอบลักษณะการทำงานของแอปในสภาวะพลังงานต่ำ

ใช้คำสั่ง หากต้องการจำลองการถอดปลั๊กอุปกรณ์

$ adb shell dumpsys battery unplug

หากต้องการทดสอบลักษณะการทำงานของอุปกรณ์เมื่อใช้พลังงานต่ำ ให้ใช้คำสั่งนี้

$ adb shell settings put global low_power 1

เมื่อทดสอบเสร็จแล้ว คุณจะยกเลิกการตั้งค่าอุปกรณ์ด้วยตนเองได้ ด้วยคำสั่งนี้

$ adb shell dumpsys battery reset