Android มีฟีเจอร์ประหยัดพลังงาน 2 อย่างที่จะยืดอายุการใช้งานแบตเตอรี่ให้ผู้ใช้ได้โดย การจัดการลักษณะการทำงานของแอปเมื่ออุปกรณ์ไม่ได้เชื่อมต่อกับแหล่งจ่ายไฟ: Doze และสแตนด์บายแอป Doze ลดการใช้แบตเตอรี่ด้วยการชะลอ CPU และกิจกรรมเครือข่ายในเบื้องหลังสำหรับแอปเมื่อไม่มีการใช้งานอุปกรณ์เป็นเวลานาน ในช่วงเวลาต่างๆ แอปสแตนด์บายจะเลื่อนกิจกรรมในเครือข่ายในเบื้องหลังออกไปเป็นเวลา แอปที่ไม่มีกิจกรรมล่าสุดของผู้ใช้
ขณะที่อุปกรณ์อยู่ใน Doze แอปจะ การเข้าถึงคุณลักษณะ ที่ใช้พลังงานแบตเตอรี่มาก ทรัพยากรจะถูกเลื่อนออกไปจนกว่าจะถึงช่วงเวลาการบำรุงรักษา ข้อจำกัดเฉพาะ แสดงใน การจัดการพลังงาน ข้อจำกัด
Doze และสแตนด์บายแอปจะจัดการลักษณะการทำงานของแอปทั้งหมดที่ทำงานใน Android 6.0 หรือสูงกว่า โดยไม่คำนึงว่าจะกำหนดเป้าหมายเป็น API ระดับ 23 โดยเฉพาะหรือไม่ ทดสอบแอปใน Doze และ App เพื่อช่วยให้ผู้ใช้ได้รับประสบการณ์ที่ดีที่สุด โหมดสแตนด์บาย และทำการปรับเปลี่ยนโค้ดตามที่จำเป็น ดังต่อไปนี้ ซึ่งจะให้รายละเอียด
ทำความเข้าใจ Doze
หากผู้ใช้ถอดปลั๊กอุปกรณ์ทิ้งไว้และอยู่กับที่เป็นระยะเวลาหนึ่ง เมื่อปิดหน้าจอ อุปกรณ์จะเข้าสู่โหมด Doze ในโหมด Doze ระบบจะพยายาม เพื่อประหยัดแบตเตอรี่โดยจำกัดแอป การเข้าถึงเครือข่ายและการใช้ CPU บริการต่างๆ และยังป้องกันไม่ให้แอปเข้าถึงเครือข่ายและเลื่อนเวลา งาน การซิงค์ และการปลุกแบบมาตรฐาน
ระบบจะออกจาก Doze เป็นเวลาสั้นๆ เพื่อให้แอปทำงาน กิจกรรมที่มีการเลื่อนเวลา ในระหว่างช่วงเวลาบำรุงรักษานี้ ระบบ เรียกใช้การซิงค์ งาน และการปลุกที่รอดำเนินการทั้งหมด และอนุญาตให้แอปเข้าถึงเครือข่ายได้
![](https://developer.android.com/static/images/training/doze.png?authuser=5&hl=th)
เมื่อพ้นช่วงเวลาการซ่อมบำรุง ระบบจะเข้าสู่ Doze อีกครั้ง การระงับการเข้าถึงเครือข่ายและการเลื่อนงาน การซิงค์ และการปลุก เมื่อเวลาผ่านไป เมตริก ระบบวางกำหนดเวลาช่วงเวลาในการซ่อมบำรุงให้ถี่น้อยลง ซึ่งจะช่วยลดแบตเตอรี่ ในกรณีที่ไม่มีการใช้งานเป็นเวลานานขึ้นเมื่ออุปกรณ์ไม่ได้กำลังชาร์จ
เมื่อผู้ใช้ปลุกระบบอุปกรณ์ด้วยการย้ายอุปกรณ์ เปิดหน้าจอ หรือ เมื่อเชื่อมต่อกับที่ชาร์จ ระบบจะออกจาก Doze แล้วแอปทั้งหมดจะกลับมาทำงานตามปกติ กิจกรรม
การจำกัดการงีบหลับ
ระบบจะใช้ข้อจำกัดต่อไปนี้กับแอปขณะอยู่ใน Doze
- ระงับการเข้าถึงเครือข่าย
- ไม่สนใจการปลุกระบบ ล็อก
- เลื่อนเวลามาตรฐาน
AlarmManager
การปลุก ซึ่งรวมถึง วันที่setExact()
และsetWindow()
, คือช่วงเวลาบำรุงรักษาครั้งต่อไป- หากคุณต้องการตั้งนาฬิกาปลุกที่เริ่มทำงานขณะอยู่ใน Doze ให้ใช้
setAndAllowWhileIdle()
หรือsetExactAndAllowWhileIdle()
- ตั้งปลุกด้วย
setAlarmClock()
ยังคงเริ่มทำงานตามปกติ ระบบจะออกจาก Doze ไม่นานก่อน สัญญาณเตือนไฟไหม้
- หากคุณต้องการตั้งนาฬิกาปลุกที่เริ่มทำงานขณะอยู่ใน Doze ให้ใช้
- ไม่สแกน Wi-Fi
- ไม่อนุญาตให้อะแดปเตอร์การซิงค์ทำงาน
- ไม่ยอม
JobScheduler
วิ่งได้
เช็กลิสต์สำหรับการงีบหลับ
- หากเป็นไปได้ ให้ใช้ Firebase Cloud Messaging (FCM) สำหรับปลายทาง การรับส่งข้อความ
- หากผู้ใช้ต้องเห็นการแจ้งเตือนทันที ให้ใช้ ข้อความที่มีลำดับความสำคัญสูงของ FCM ใช้ลำดับความสำคัญสูงกับข้อความที่ให้ผลลัพธ์ ในการแจ้งเตือน ดูคำแนะนำเพิ่มเติมได้ที่ FCM เอกสารประกอบเกี่ยวกับลำดับความสำคัญของข้อความสำหรับ Android
- ให้ข้อมูลที่เพียงพอภายในข้อความแรก เพย์โหลด ดังนั้นการเข้าถึงเครือข่ายในครั้งต่อๆ ไปจึงไม่จำเป็น
- ตั้งปลุกที่สำคัญด้วย
setAndAllowWhileIdle()
และsetExactAndAllowWhileIdle()
- ทดสอบแอปใน Doze
ปรับแอปให้เข้ากับ Doze
Doze อาจส่งผลกระทบต่อแอปต่างๆ แตกต่างกันไปตามความสามารถที่แอปเหล่านั้นมีให้ และบริการที่พวกเขาใช้ แอปจำนวนมากทำงานเป็นปกติในรอบต่างๆ ของ Doze โดยไม่ต้องแก้ไข ในบางกรณี คุณต้องเพิ่มประสิทธิภาพวิธีที่แอป จัดการเครือข่าย การปลุก งาน และการซิงค์ แอปต้องสามารถ จัดการกิจกรรมในช่วงเวลาบำรุงรักษาแต่ละช่วง
คุณสามารถใช้ AlarmManager
สองตัวเพื่อช่วยในการตั้งเวลานาฬิกาปลุก
วิธีการ: setAndAllowWhileIdle()
และ
setExactAndAllowWhileIdle()
คุณสามารถใช้วิธีการเหล่านี้เพื่อตั้งปลุก
ที่เริ่มทำงานได้แม้ว่าอุปกรณ์จะอยู่ใน Doze ก็ตาม
การจำกัดการ Doze ในการเข้าถึงเครือข่ายยังอาจส่งผลต่อแอปด้วย โดยเฉพาะถ้าแอปต้องพึ่งพาข้อความแบบเรียลไทม์ เช่น เสียงจั๊กจี้หรือ การแจ้งเตือน หากแอปต้องใช้การเชื่อมต่อเครือข่ายอย่างต่อเนื่องเพื่อ รับข้อความ ให้ใช้ Firebase Cloud Messaging (FCM) หาก เท่าที่จะเป็นไปได้
คุณสามารถใช้ Doze เพื่อยืนยันว่าแอปของคุณทำงานตามที่คาดไว้
คำสั่ง adb
เพื่อบังคับให้ระบบเข้าและออกจาก Doze และ
สังเกตลักษณะการทำงานของแอป โปรดดูรายละเอียดที่หัวข้อ
ทดสอบด้วย Doze และสแตนด์บายแอป
ทำความเข้าใจสแตนด์บายแอป
โหมดสแตนด์บายแอปช่วยให้ระบบระบุได้ว่าแอปไม่มีความเคลื่อนไหวเมื่อผู้ใช้ไม่ได้อยู่ ใช้งานเป็นประจำ ระบบจะพิจารณาเมื่อผู้ใช้ไม่ได้ แตะแอปเป็นระยะเวลาหนึ่งและไม่มีเงื่อนไขใดดังต่อไปนี้ นำไปใช้:
- ผู้ใช้เปิดแอปอย่างชัดเจน
- แอปมีกระบวนการที่ทำงานอยู่เบื้องหน้าในขณะนี้ ไม่ว่าจะเป็นกิจกรรม หรือบริการที่ทำงานอยู่เบื้องหน้า หรือมีกิจกรรมอื่นหรือบริการที่ทำงานอยู่เบื้องหน้าใช้งานอยู่
- แอปจะสร้างการแจ้งเตือนที่ผู้ใช้เห็นบนหน้าจอล็อกหรือใน ถาดการแจ้งเตือน
เมื่อผู้ใช้เสียบอุปกรณ์เข้ากับแหล่งจ่ายไฟ ระบบจะเผยแพร่แอป จากสถานะสแตนด์บาย ทำให้สามารถเข้าถึงเครือข่ายและดำเนินการต่างๆ ได้อย่างอิสระ งานที่รอดำเนินการและการซิงค์ หากอุปกรณ์ไม่มีการใช้งานเป็นระยะเวลานาน ระบบอนุญาตให้เข้าถึงเครือข่ายแอปที่ไม่ได้ใช้งานประมาณวันละครั้ง
ใช้ FCM เพื่อโต้ตอบกับแอปขณะที่อุปกรณ์ไม่มีการใช้งาน
Firebase Cloud Messaging (FCM) เป็นบริการจากระบบคลาวด์ไปยังอุปกรณ์ที่ช่วยให้คุณสนับสนุนแบบเรียลไทม์ การรับส่งข้อความดาวน์สตรีมระหว่างบริการแบ็กเอนด์และแอปในอุปกรณ์ Android FCM ให้การเชื่อมต่อถาวรกับระบบคลาวด์เพียงหนึ่งเดียว ทุกแอปที่ต้องใช้ การรับส่งข้อความแบบเรียลไทม์ สามารถแชร์การเชื่อมต่อนี้ การเชื่อมต่อที่แชร์นี้ ช่วยเพิ่มประสิทธิภาพการใช้แบตเตอรี่ได้อย่างมากโดยไม่จำเป็นสำหรับ เพื่อรักษาการเชื่อมต่อถาวรของตนเองที่แยกจากกัน ซึ่งสามารถ แบตเตอรี่หมดอย่างรวดเร็ว ด้วยเหตุนี้ หากแอปของคุณต้องใช้การรับส่งข้อความ ด้วยบริการเสริม เราขอแนะนำให้คุณใช้ FCM หาก แทนการดูแลการเชื่อมต่อเครือข่ายแบบถาวรของคุณเอง
FCM ได้รับการเพิ่มประสิทธิภาพให้ทำงานร่วมกับโหมดเมื่อไม่มีการใช้งาน Doze และสแตนด์บายแอป FCM ข้อความที่มีลำดับความสำคัญสูงช่วยให้คุณปลุกระบบแอปเพื่อดึงดูดผู้ใช้ ในแอป Doze ระบบจะส่งข้อความและให้สิทธิ์เข้าถึงชั่วคราวแก่แอปในโหมดสแตนด์บาย ไปยังบริการเครือข่ายและการทำงานขณะล็อกบางส่วน จากนั้นจะส่งคืนอุปกรณ์หรือแอปกลับไปยัง สถานะไม่มีการใช้งาน สำหรับการแจ้งเตือนที่แสดงต่อผู้ใช้ซึ่งมีการจำกัดช่วงเวลา โปรดลองใช้ ข้อความสำคัญเพื่อเปิดใช้การส่งในโหมด Doze ข้อความที่มีลำดับความสำคัญสูงสามารถ ผลการค้นหาการแจ้งเตือน โปรดดู FCM คำแนะนำเกี่ยวกับข้อความที่มีลำดับความสำคัญสูงสำหรับข้อมูลเพิ่มเติม
สำหรับข้อความที่ไม่ส่งผลให้มีการแจ้งเตือน เช่น เก็บเนื้อหาแอปไว้ ทำงานในเบื้องหลังหรือเริ่มซิงค์ข้อมูล ให้ใช้ FCM ที่มีลำดับความสำคัญปกติ ข้อความ ระบบจะส่งข้อความที่มีลำดับความสำคัญปกติทันทีหากอุปกรณ์ไม่ได้ ใน Doze หากอุปกรณ์อยู่ในโหมด Doze ระบบจะส่งอุปกรณ์ไปภายในระยะเวลาดังกล่าว งดเว้นช่วงเวลาบำรุงรักษาหรือทันทีที่ผู้ใช้ปลุกระบบอุปกรณ์
ตามแนวทางปฏิบัติแนะนำทั่วไป ถ้าแอปของคุณต้องใช้การรับส่งข้อความดาวน์สตรีม ให้ใช้ FCM หากแอปใช้ FCM อยู่แล้ว ให้ตรวจสอบว่าแอปใช้ข้อความที่มีลำดับความสำคัญสูง สำหรับข้อความที่มีการแจ้งเตือนที่แสดงต่อผู้ใช้เท่านั้น
การสนับสนุนสำหรับ Use Case อื่นๆ
แอปเกือบทั้งหมดรองรับ Doze ได้ด้วยการจัดการการเชื่อมต่อเครือข่าย การปลุก งาน การซิงค์ และโดยการใช้ข้อความ FCM สำหรับการใช้งานในวงจำกัด วิธีนี้ก็อาจไม่เพียงพอ ในกรณีดังกล่าว ระบบจะจัดเตรียม รายการแอปที่กำหนดค่าได้ซึ่งได้รับการยกเว้นจาก Doze และสแตนด์บายแอปเพียงบางส่วน การเพิ่มประสิทธิภาพ
แอปที่ได้รับการยกเว้นบางส่วนสามารถใช้เครือข่ายและคงการปลุกระบบบางส่วนไว้ชั่วคราวได้
ในระหว่าง Doze และสแตนด์บายแอป อย่างไรก็ตาม ข้อจำกัดอื่นๆ ยังคงมีผล
เช่นเดียวกับในแอปอื่นๆ เช่น งานและการซิงค์ของแอป
จะเลื่อนใน API ระดับ 23 หรือต่ำกว่า และ
การปลุก AlarmManager
ไม่เริ่มทำงาน แอปสามารถตรวจสอบว่า
ซึ่งอยู่ในรายชื่อการยกเว้นโดยการโทร
isIgnoringBatteryOptimizations()
ผู้ใช้สามารถกำหนดค่ารายการแอปที่ได้รับการยกเว้นด้วยตนเองได้ในการตั้งค่า แบตเตอรี่ > การเพิ่มประสิทธิภาพแบตเตอรี่ อีกวิธีหนึ่งคือระบบ มีวิธีให้แอปขอให้ผู้ใช้ยกเว้นคำขอเหล่านั้น ดังนี้
- แอปส่วนใหญ่สามารถเรียกใช้ Intent ที่มีองค์ประกอบ
ACTION_IGNORE_BATTERY_OPTIMIZATION_SETTINGS
- แอปที่เป็นไปตามกรณีการใช้งานที่ยอมรับได้
สามารถเรียกใช้ Intent ที่มี
ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS
Intent เพื่อให้ผู้ใช้เพิ่มแอปลงในรายการการยกเว้นโดยตรง โดยไม่ต้องไปที่การตั้งค่าระบบ
แอปจะตรวจสอบได้ว่าแอปดังกล่าวอยู่ในรายการการยกเว้นหรือไม่โดยการเรียกใช้
isIgnoringBatteryOptimizations()
ทดสอบด้วย Doze และสแตนด์บายแอป
ทดสอบแอปอย่างเต็มรูปแบบใน Doze เพื่อช่วยให้ผู้ใช้ได้รับประสบการณ์การใช้งานที่ยอดเยี่ยม และสแตนด์บายแอป
ทดสอบแอปด้วย Doze
คุณสามารถทดสอบโหมด Doze ได้โดยทำดังนี้
- กำหนดค่าอุปกรณ์ฮาร์ดแวร์หรืออุปกรณ์เสมือนด้วย Android 6.0 (API ระดับ 23) หรืออิมเมจระบบที่สูงกว่า
- เชื่อมต่ออุปกรณ์กับเครื่องพัฒนาซอฟต์แวร์แล้วติดตั้งแอป
- เรียกใช้แอปและปล่อยให้แอปทำงาน
- บังคับให้ระบบเข้าสู่โหมดไม่มีการใช้งานโดยเรียกใช้คำสั่งต่อไปนี้
$ adb shell dumpsys deviceidle force-idle
- เมื่อพร้อมแล้ว ให้ออกจากโหมดไม่มีการใช้งานโดยเรียกใช้คำสั่งต่อไปนี้
$ adb shell dumpsys deviceidle unforce
- เปิดใช้งานอุปกรณ์อีกครั้งโดยเรียกใช้คำสั่งต่อไปนี้
$ adb shell dumpsys battery reset
- สังเกตลักษณะการทำงานของแอปหลังจากเปิดใช้งานอุปกรณ์อีกครั้ง สร้าง ตรวจสอบให้แน่ใจว่าแอปสามารถกู้คืนได้อย่างนุ่มนวลเมื่ออุปกรณ์ออกจาก Doze
ทดสอบแอปด้วยฟีเจอร์สแตนด์บายแอป
หากต้องการทดสอบโหมดสแตนด์บายแอปด้วยแอปของคุณ ให้ดำเนินการดังนี้
- กำหนดค่าอุปกรณ์ฮาร์ดแวร์หรืออุปกรณ์เสมือนด้วย Android 6.0 (API ระดับ 23) หรืออิมเมจระบบที่สูงกว่า
- เชื่อมต่ออุปกรณ์กับเครื่องพัฒนาซอฟต์แวร์แล้วติดตั้งแอป
- เรียกใช้แอปและปล่อยให้แอปทำงาน
- บังคับให้แอปเข้าสู่โหมดสแตนด์บายแอปโดยเรียกใช้คำสั่งต่อไปนี้
$ adb shell dumpsys battery unplug $ adb shell am set-inactive <packageName> true
- จำลองการปลุกแอปโดยใช้คำสั่งต่อไปนี้
$ adb shell am set-inactive <packageName> false $ adb shell am get-inactive <packageName>
- สังเกตลักษณะการทำงานของแอปหลังจากปลุกแอป ตรวจสอบว่าแอป กู้คืนได้อย่างนุ่มนวลจากโหมดสแตนด์บาย โดยเฉพาะอย่างยิ่ง ให้ตรวจสอบว่าแอปของคุณ การแจ้งเตือนและงานเบื้องหลังทำงานตามที่คาดไว้
กรณีการใช้งานที่ยอมรับได้สำหรับการยกเว้น
ตารางต่อไปนี้เน้นกรณีการใช้งานที่หลากหลายและความสามารถในการยอมรับ
เพื่อให้แอปใช้ ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS
ความตั้งใจในสถานการณ์เหล่านี้ โดยทั่วไป แอปของคุณไม่เป็นไปตามหลักเกณฑ์ต่อไปนี้
ยกเว้นกรณีที่ Doze หรือสแตนด์บายแอปละเมิดฟังก์ชันหลักของแอปหรือ
มีเหตุผลทางเทคนิคที่แอปของคุณใช้ FCM ที่มีลำดับความสำคัญสูงไม่ได้
ข้อความ
สำหรับข้อมูลเพิ่มเติม โปรดดู การสนับสนุนสำหรับ กรณีการใช้งานอื่นๆ
ประเภท | กรณีการใช้งาน | ใช้ FCM ได้ไหม | ได้รับการยกเว้นหรือไม่ | หมายเหตุ |
---|---|---|---|---|
แอปการรับส่งข้อความโต้ตอบแบบทันที แชท หรือโทร | ต้องส่งข้อความแบบเรียลไทม์ถึงผู้ใช้ในขณะที่ อุปกรณ์อยู่ใน Doze หรือแอปอยู่ในโหมดสแตนด์บายแอป | ใช่ กำลังใช้ FCM | ยอมรับไม่ได้ | ใช้ข้อความที่มีลำดับความสำคัญสูงของ FCM เพื่อปลุกระบบแอปและสิทธิ์เข้าถึง เครือข่าย |
มี แต่ไม่ได้ใช้ข้อความที่มีลำดับความสำคัญสูงของ FCM | ||||
แอปการรับส่งข้อความโต้ตอบแบบทันที แชท หรือโทร แอป VOIP สำหรับองค์กร | ไม่ได้ ใช้ FCM ไม่ได้ เนื่องจากขึ้นอยู่กับด้านเทคนิคกับการรับส่งข้อความอื่น หรือ Doze และสแตนด์บายแอปทำลายฟังก์ชันหลักของแอป | ยอมรับได้ | ||
แอปความปลอดภัย | แอปที่ดูแลผู้ใช้และครอบครัวให้ปลอดภัย | ในกรณีที่เกี่ยวข้อง | ยอมรับได้ | |
แอปงานอัตโนมัติ | ฟังก์ชันหลักของแอปคือการตั้งเวลาการดำเนินการอัตโนมัติ เช่น สำหรับ Instant การรับส่งข้อความ การโทร หรือการจัดการรูปภาพใหม่ | ในกรณีที่เกี่ยวข้อง | ยอมรับได้ | |
แอปที่ใช้กับอุปกรณ์ต่อพ่วง | ฟังก์ชันหลักของแอปคือการคงการเชื่อมต่อ อย่างต่อเนื่องกับ อุปกรณ์ต่อพ่วงเพื่อวัตถุประสงค์ในการให้บริการอุปกรณ์ต่อพ่วง การเข้าถึงอินเทอร์เน็ต | ในกรณีที่เกี่ยวข้อง | ยอมรับได้ | |
แอปต้องเชื่อมต่อกับอุปกรณ์ต่อพ่วงเป็นระยะๆ เพื่อซิงค์ หรือเฉพาะต้องการเชื่อมต่อกับอุปกรณ์ เช่น หูฟังไร้สาย ซึ่งเชื่อมต่อแล้ว ผ่านโปรไฟล์บลูทูธมาตรฐาน | ในกรณีที่เกี่ยวข้อง | ยอมรับไม่ได้ |