เพิ่มประสิทธิภาพสำหรับ Doze และสแตนด์บายแอป

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

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

Doze และสแตนด์บายแอปจะจัดการลักษณะการทำงานของแอปทั้งหมดที่ทำงานใน Android 6.0 หรือสูงกว่า โดยไม่คำนึงว่าจะกำหนดเป้าหมายเป็น API ระดับ 23 โดยเฉพาะหรือไม่ ทดสอบแอปใน Doze และ App เพื่อช่วยให้ผู้ใช้ได้รับประสบการณ์ที่ดีที่สุด โหมดสแตนด์บาย และทำการปรับเปลี่ยนโค้ดตามที่จำเป็น ดังต่อไปนี้ ซึ่งจะให้รายละเอียด

ทำความเข้าใจ Doze

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

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

วันที่
รูปที่ 1 Doze จะมีช่วงเวลาบำรุงรักษาตามรอบสำหรับ เพื่อใช้เครือข่ายและจัดการกับกิจกรรมที่รอดำเนินการ

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

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

การจำกัดการงีบหลับ

ระบบจะใช้ข้อจำกัดต่อไปนี้กับแอปขณะอยู่ใน Doze

  • ระงับการเข้าถึงเครือข่าย
  • ไม่สนใจการปลุกระบบ ล็อก
  • เลื่อนเวลามาตรฐาน AlarmManager การปลุก ซึ่งรวมถึง วันที่ setExact() และ setWindow(), คือช่วงเวลาบำรุงรักษาครั้งต่อไป
    • หากคุณต้องการตั้งนาฬิกาปลุกที่เริ่มทำงานขณะอยู่ใน Doze ให้ใช้ setAndAllowWhileIdle() หรือ setExactAndAllowWhileIdle()
    • ตั้งปลุกด้วย setAlarmClock() ยังคงเริ่มทำงานตามปกติ ระบบจะออกจาก Doze ไม่นานก่อน สัญญาณเตือนไฟไหม้
  • ไม่สแกน Wi-Fi
  • ไม่อนุญาตให้อะแดปเตอร์การซิงค์ทำงาน
  • ไม่ยอม JobScheduler วิ่งได้

เช็กลิสต์สำหรับการงีบหลับ

ปรับแอปให้เข้ากับ 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()

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

แอปจะตรวจสอบได้ว่าแอปดังกล่าวอยู่ในรายการการยกเว้นหรือไม่โดยการเรียกใช้ isIgnoringBatteryOptimizations()

ทดสอบด้วย Doze และสแตนด์บายแอป

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

ทดสอบแอปด้วย Doze

คุณสามารถทดสอบโหมด Doze ได้โดยทำดังนี้

  1. กำหนดค่าอุปกรณ์ฮาร์ดแวร์หรืออุปกรณ์เสมือนด้วย Android 6.0 (API ระดับ 23) หรืออิมเมจระบบที่สูงกว่า
  2. เชื่อมต่ออุปกรณ์กับเครื่องพัฒนาซอฟต์แวร์แล้วติดตั้งแอป
  3. เรียกใช้แอปและปล่อยให้แอปทำงาน
  4. บังคับให้ระบบเข้าสู่โหมดไม่มีการใช้งานโดยเรียกใช้คำสั่งต่อไปนี้
        $ adb shell dumpsys deviceidle force-idle
        
  5. เมื่อพร้อมแล้ว ให้ออกจากโหมดไม่มีการใช้งานโดยเรียกใช้คำสั่งต่อไปนี้
        $ adb shell dumpsys deviceidle unforce
        
  6. เปิดใช้งานอุปกรณ์อีกครั้งโดยเรียกใช้คำสั่งต่อไปนี้
        $ adb shell dumpsys battery reset
        
  7. สังเกตลักษณะการทำงานของแอปหลังจากเปิดใช้งานอุปกรณ์อีกครั้ง สร้าง ตรวจสอบให้แน่ใจว่าแอปสามารถกู้คืนได้อย่างนุ่มนวลเมื่ออุปกรณ์ออกจาก Doze

ทดสอบแอปด้วยฟีเจอร์สแตนด์บายแอป

หากต้องการทดสอบโหมดสแตนด์บายแอปด้วยแอปของคุณ ให้ดำเนินการดังนี้

  1. กำหนดค่าอุปกรณ์ฮาร์ดแวร์หรืออุปกรณ์เสมือนด้วย Android 6.0 (API ระดับ 23) หรืออิมเมจระบบที่สูงกว่า
  2. เชื่อมต่ออุปกรณ์กับเครื่องพัฒนาซอฟต์แวร์แล้วติดตั้งแอป
  3. เรียกใช้แอปและปล่อยให้แอปทำงาน
  4. บังคับให้แอปเข้าสู่โหมดสแตนด์บายแอปโดยเรียกใช้คำสั่งต่อไปนี้
        $ adb shell dumpsys battery unplug
        $ adb shell am set-inactive <packageName> true
        
  5. จำลองการปลุกแอปโดยใช้คำสั่งต่อไปนี้
        $ adb shell am set-inactive <packageName> false
        $ adb shell am get-inactive <packageName>
        
  6. สังเกตลักษณะการทำงานของแอปหลังจากปลุกแอป ตรวจสอบว่าแอป กู้คืนได้อย่างนุ่มนวลจากโหมดสแตนด์บาย โดยเฉพาะอย่างยิ่ง ให้ตรวจสอบว่าแอปของคุณ การแจ้งเตือนและงานเบื้องหลังทำงานตามที่คาดไว้

กรณีการใช้งานที่ยอมรับได้สำหรับการยกเว้น

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

สำหรับข้อมูลเพิ่มเติม โปรดดู การสนับสนุนสำหรับ กรณีการใช้งานอื่นๆ

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