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 ที่เหมาะสมโดยอัตโนมัติและคุณไม่จำเป็นต้องกำหนดค่าผู้ให้บริการ
วิธีเปิดใช้โหมดสลีปสำหรับอุปกรณ์
- ยืนยันว่าอุปกรณ์ติดตั้งบริการการรับส่งข้อความบนระบบคลาวด์แล้ว
- ในไฟล์การกําหนดค่าการวางซ้อนของอุปกรณ์
overlay/frameworks/base/core/res/res/values/config.xml
ให้ตั้งค่าconfig_enableAutoPowerModes
เป็นtrue
ใน AOSP ระบบจะตั้งค่าพารามิเตอร์นี้เป็น<bool name="config_enableAutoPowerModes">true</bool>
false
(ปิดใช้โหมดสลีป) โดยค่าเริ่มต้น
- ตรวจสอบว่าแอปและบริการที่โหลดไว้ล่วงหน้ามีลักษณะดังนี้
- ใช้หลักเกณฑ์การเพิ่มประสิทธิภาพเพื่อประหยัดพลังงาน โปรดดูรายละเอียดที่หัวข้อการทดสอบและการเพิ่มประสิทธิภาพแอป
หรือ
- ได้รับการยกเว้นจาก Doze และสแตนด์บายแอป โปรดดูรายละเอียดที่หัวข้อการยกเว้นแอป
- ใช้หลักเกณฑ์การเพิ่มประสิทธิภาพเพื่อประหยัดพลังงาน โปรดดูรายละเอียดที่หัวข้อการทดสอบและการเพิ่มประสิทธิภาพแอป
- ยืนยันว่าบริการที่จำเป็นได้รับการยกเว้นจากโหมดสลีป
เคล็ดลับ
- หากเป็นไปได้ ให้ใช้ FCM สําหรับการรับส่งข้อความในระบบย่อย
- หากผู้ใช้ต้องเห็นการแจ้งเตือนทันที ให้ใช้ข้อความที่มีลําดับความสําคัญสูงของ FCM
- ระบุข้อมูลให้เพียงพอภายในเพย์โหลดของข้อความแรก (เพื่อหลีกเลี่ยงการเข้าถึงเครือข่ายในภายหลังที่ไม่จำเป็น)
- ตั้งปลุกที่สำคัญด้วย
setAndAllowWhileIdle()
และsetExactAndAllowWhileIdle()
ทดสอบและเพิ่มประสิทธิภาพแอป
ทดสอบแอปทั้งหมด (โดยเฉพาะแอปที่โหลดไว้ล่วงหน้า) ในโหมด Doze โปรดดูรายละเอียดที่หัวข้อการทดสอบด้วยโหมด Doze และสแตนด์บายแอป