การจัดการพลังงานของแพลตฟอร์มด้วย Doze

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

เกี่ยวกับโหมด Doze

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

อุปกรณ์ที่ไม่ได้ใช้งานในโหมดสลีปจะเข้าสู่ช่วงเวลาบำรุงรักษาเป็นระยะๆ ซึ่งแอปจะทำงานค้างไว้ให้เสร็จสมบูรณ์ได้ (การซิงค์ งาน ฯลฯ) จากนั้นโหมดสลีปจะเข้าสู่โหมดสลีปต่ออีกเป็นระยะเวลานานขึ้น ตามด้วยช่วงเวลาบำรุงรักษาอีก แพลตฟอร์มจะดำเนินการตามลำดับการนอนหลับ/การบำรุงรักษาในโหมด Doze ต่อ โดยเพิ่มระยะเวลาที่ไม่ได้ใช้งานในแต่ละครั้ง จนกว่าจะถึงเวลานอนหลับสูงสุด 2-3 ชั่วโมง อุปกรณ์ในโหมดสลีปจะยังคงรับรู้การเคลื่อนไหวอยู่เสมอและจะออกจากโหมดสลีปทันทีหากตรวจพบการเคลื่อนไหว

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

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

ข้อกำหนดของโหมด Doze

อุปกรณ์ที่รองรับโหมด Doze ต้องมีบริการการรับส่งข้อความบนระบบคลาวด์ เช่น Firebase Cloud Messaging (FCM) เหตุการณ์ทริกเกอร์ภายนอก เช่น ข้อความในระบบคลาวด์ สามารถปลุกแอปให้ทำงานชั่วคราวได้ในขณะที่อุปกรณ์ยังอยู่ในโหมดสลีป

อุปกรณ์ที่รองรับโหมด Doze อย่างเต็มรูปแบบจะต้องมีเครื่องตรวจจับการเคลื่อนไหว (SMD) ที่สำคัญด้วย อย่างไรก็ตาม โหมด Doze แบบเบาใน Android 7.0 ขึ้นไปไม่จําเป็นต้องใช้ SMD หากเปิดใช้โหมดประหยัดพลังงานในอุปกรณ์ที่มีลักษณะดังนี้

  • มี SMD การเพิ่มประสิทธิภาพ Doze แบบเต็มจะเกิดขึ้น (รวมถึงการเพิ่มประสิทธิภาพแบบเบา)
  • ไม่มี SMD จะมีการเพิ่มประสิทธิภาพ Doze แบบเบาเท่านั้น

วงจร Doze

โหมดสลีปจะเริ่มขึ้นเมื่อแพลตฟอร์มตรวจพบว่าอุปกรณ์ไม่มีการใช้งาน และสิ้นสุดลงเมื่อมีกิจกรรมที่ตรงตามเกณฑ์การออกอย่างน้อย 1 รายการ

แพลตฟอร์มจะตรวจพบว่าอุปกรณ์ไม่มีการใช้งานในกรณีต่อไปนี้

  • อุปกรณ์อยู่กับที่ (ใช้ SMD)
  • หน้าจอของอุปกรณ์ปิดอยู่เป็นระยะเวลาหนึ่ง

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

ระหว่างโหมด Doze

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

  • แอปไม่ได้รับอนุญาตให้เข้าถึงเครือข่าย
  • ละเว้นการล็อกที่ตื่นอยู่ของแอป
  • การปลุกจะเลื่อนออกไป ไม่รวมการปลุกนาฬิกาปลุกและการปลุกที่ตั้งค่าโดยใช้ setAndAllowWhileIdle() (จำกัด 1 ครั้งต่อ 15 นาทีต่อแอปขณะอยู่ในโหมดสลีป) ข้อยกเว้นนี้มีไว้สำหรับแอป (เช่น ปฏิทิน) ที่ต้องแสดงการแจ้งเตือนการช่วยเตือนกิจกรรม
  • ไม่มีการสแกนหา Wi-Fi
  • การซิงค์ SyncAdapter และงาน JobScheduler จะเลื่อนไปจนกว่าจะถึงช่วงเวลาบำรุงรักษาครั้งถัดไป
  • แอปที่รับข้อความ SMS และ MMS จะอยู่ในรายการที่อนุญาตชั่วคราวเพื่อให้ประมวลผลได้เสร็จสมบูรณ์

ออก

แพลตฟอร์มจะนำอุปกรณ์ออกจากโหมดสลีปเมื่อตรวจพบสิ่งต่อไปนี้

  • การโต้ตอบของผู้ใช้กับอุปกรณ์
  • การเคลื่อนไหวของอุปกรณ์
  • หน้าจอของอุปกรณ์เปิดขึ้น
  • การปลุกของนาฬิกาปลุกที่ใกล้จะถึง

การแจ้งเตือนจะไม่ทําให้อุปกรณ์ออกจากโหมดสลีป

Android 7.0 ขึ้นไปจะขยายโหมดประหยัดพลังงานโดยเปิดใช้โหมดสลีปแบบเบาในระหว่างที่ปิดหน้าจอก่อนที่อุปกรณ์จะไม่มีการใช้งาน

รูปที่ 1 โหมด Doze สำหรับอุปกรณ์แบบอยู่กับที่และแบบเคลื่อนที่

การทำงาน Doze โหมด Doze เวอร์ชันน้ำหนักเบา
ทริกเกอร์ ปิดหน้าจอ ใช้แบตเตอรี่ ไม่ได้เคลื่อนไหว หน้าจอปิดอยู่ ใช้แบตเตอรี่ (ถอดปลั๊ก)
ช่วงเวลา ระยะเวลาที่เพิ่มขึ้นอย่างต่อเนื่องด้วยการบำรุงรักษา ช่วงเวลา 1 นาทีซ้ำๆ ที่มีช่วงเวลาบำรุงรักษา
ข้อจำกัด ไม่มีการเข้าถึงเครือข่าย การปลุกระบบไม่ให้ล็อก หรือการสแกน GPS/Wi-Fi ระบบจะเลื่อนการปลุกและงาน/การซิงค์ไว้ ไม่มีสิทธิ์เข้าถึงเครือข่าย งาน/การซิงค์จะเลื่อนออกไป ยกเว้นในช่วงที่ดำเนินการบำรุงรักษา
ลักษณะการทำงาน เฉพาะข้อความ Push Notification ที่มีลำดับความสำคัญสูงเท่านั้นที่ได้รับ ข้อความแบบเรียลไทม์ทั้งหมด (การรับส่งข้อความทันที การโทร ฯลฯ) ที่ได้รับ ข้อความ Push ที่มีความสําคัญสูงจะเปิดใช้การเข้าถึงเครือข่ายชั่วคราว
ออก การเคลื่อนไหว หน้าจอเปิดอยู่ หรือการปลุกของนาฬิกาปลุก เปิดหน้าจอ

การโต้ตอบกับฟีเจอร์สแตนด์บายแอป

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

ผสานรวม Doze

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

วิธีเปิดใช้โหมดสลีปสำหรับอุปกรณ์

  1. ยืนยันว่าอุปกรณ์ติดตั้งบริการการรับส่งข้อความบนระบบคลาวด์แล้ว
  2. ในไฟล์การกําหนดค่าการวางซ้อนของอุปกรณ์ overlay/frameworks/base/core/res/res/values/config.xml ให้ตั้งค่า config_enableAutoPowerModesเป็น true
    <bool name="config_enableAutoPowerModes">true</bool>
    
    ใน AOSP ระบบจะตั้งค่าพารามิเตอร์นี้เป็น false (ปิดใช้โหมดสลีป) โดยค่าเริ่มต้น
  3. ตรวจสอบว่าแอปและบริการที่โหลดไว้ล่วงหน้ามีลักษณะดังนี้
  4. ยืนยันว่าบริการที่จำเป็นได้รับการยกเว้นจากโหมดสลีป

เคล็ดลับ

ทดสอบและเพิ่มประสิทธิภาพแอป

ทดสอบแอปทั้งหมด (โดยเฉพาะแอปที่โหลดไว้ล่วงหน้า) ในโหมด Doze โปรดดูรายละเอียดที่หัวข้อการทดสอบด้วยโหมด Doze และสแตนด์บายแอป