ประหยัดพลังงานและแบตเตอรี่

คีย์เวิร์ด: wearos, พลังงาน, แบตเตอรี่, ประสิทธิภาพ

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

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

หากต้องการปรับปรุงประสิทธิภาพการใช้พลังงานของแอป ให้ทําตามแนวทางปฏิบัติแนะนําในการออกแบบต่อไปนี้

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

    หากอุปกรณ์กำลังชาร์จและมีการเชื่อมต่อ Wi-Fi ให้กำหนดเวลางานเพื่อโหลดข้อมูล รูปภาพ และการอัปเดตที่ผู้ใช้มีแนวโน้มจะต้องการดูในแอปล่วงหน้า

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

ตรวจสอบการใช้งานแบตเตอรี่ในช่วงเวลาต่างๆ

หากต้องการวิเคราะห์สถิติแบตเตอรี่ของอุปกรณ์ Wear OS ที่เรียกใช้แอป ให้ป้อนคำสั่งต่อไปนี้ในหน้าต่างเทอร์มินัลบนเครื่องที่ใช้พัฒนา

adb shell dumpsys batterystats

ไลบรารีใน GitHub มีโปรแกรมแยกวิเคราะห์สถิติแบตเตอรี่ ซึ่งอาจมีประโยชน์เมื่อเรียกใช้ร่วมกับคำสั่งนี้

เหตุการณ์ที่ส่งผลต่ออายุการใช้งานแบตเตอรี่

ก่อนคิดถึงแอปของคุณโดยเฉพาะ คุณควรพิจารณาเหตุการณ์ที่สิ้นเปลืองพลังงานในอุปกรณ์ Wear OS โดยทั่วไป

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

กิจกรรม ผลกระทบต่ออายุการใช้งานแบตเตอรี่ วิธีบรรเทา
เข้าถึงเครือข่าย ซึ่งรวมถึง LTE และ Wi-Fi สูงมาก เลื่อนการเข้าถึงเครือข่ายที่ไม่จำเป็นไว้จนกว่าอุปกรณ์จะชาร์จ
เปิดหน้าจอและเริ่มโหมดอินเทอร์แอกทีฟ สูง อย่ากระตุ้นให้ผู้ใช้เปิดหน้าจอไว้นานกว่าที่จำเป็น มอบประสบการณ์การใช้งานที่ใช้โหมดเปิดอยู่ตลอดเวลา หรือที่เรียกว่าโหมดแอมเบียนท์
เข้าถึงเซ็นเซอร์ GPS สูง หากเป็นไปได้ ให้รอจนกว่าผู้ใช้จะขอสิทธิ์เข้าถึง GPS
ใช้งาน CPU อย่างต่อเนื่อง สูง ใช้โฟลว์โดยใช้ Jetpack Compose
เข้าถึงเซ็นเซอร์วัดอัตราการเต้นของหัวใจ กลาง ใช้เวลาทำงานของโปรเซสเซอร์เมื่อได้รับการเรียกกลับจากเซ็นเซอร์ API เช่น เมื่อใช้บริการสุขภาพใน Wear OS
เข้าถึงอุปกรณ์อื่นผ่านบลูทูธ กลาง กำหนดเซสชันให้สั้น
ใช้ Wake Lock กลาง ลดการสร้างและการใช้ Wakelock ด้วยตนเอง WorkManager

ลดเวลาเปิดหน้าจอ

ในแอป Wear OS ให้ทำตามหลักการการใช้หน้าจอต่อไปนี้

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

    • ลดเปอร์เซ็นต์ของหน้าจออุปกรณ์ที่สว่าง
    • ไม่แสดงภาพเคลื่อนไหว
    • ไม่อัปเดตเนื้อหาของหน้าจอ ยกเว้นระหว่างonAmbientUpdate()การเรียกกลับ

ลดการใช้ CPU

ในแอป Wear OS ให้ทำตามหลักการการใช้ CPU ต่อไปนี้

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

ลดจำนวนการตื่นให้เหลือน้อยที่สุด

ในกรณีส่วนใหญ่ ให้หลีกเลี่ยงการดำเนินการที่ป้องกันไม่ให้แอปเข้าสู่โหมดสลีป เช่น Wakelock เช่น ในแอปสุขภาพและการออกกำลังกาย การออกกำลังกายที่ทำงานต่อเนื่องเป็นเวลานานไม่จำเป็นต้องใช้การล็อกให้ตื่น ใช้เวลาทำงานของโปรเซสเซอร์เมื่อได้รับการเรียกกลับจาก API เซ็นเซอร์ เช่น เมื่อใช้บริการสุขภาพใน Wear OS

มีบางกรณีที่คุณใช้ Wakelock ได้ เช่น เมื่อแอปทําอย่างใดอย่างหนึ่งต่อไปนี้

  • เล่นสื่อขณะล็อกหน้าจอหรือขณะใช้แอปอื่น
  • ใช้ WorkManager หรือ JobScheduler (ระบบจะเก็บข้อมูลตื่นในนามของคุณเมื่อเรียกใช้งานในเบื้องหลัง)

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

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

ตรวจสอบสาเหตุที่แอปไม่มีการใช้งาน

พิจารณาสิ่งที่แอปที่ใช้งานอยู่ทําเมื่อเกิดเหตุการณ์สําคัญในอุปกรณ์ เช่น เหตุการณ์ต่อไปนี้

  • หน้าจอจะปิดและอุปกรณ์จะเข้าสู่โหมดแอมเบียนท์
  • แอปถูกปัดออก

หากต้องการวิเคราะห์กิจกรรมในแอป ให้ใช้เครื่องมือที่แสดงในส่วนต่อไปนี้

Power Profiler

เครื่องมือวิเคราะห์พลังงานจะเข้าถึงได้ในเมนู Android Studio โดยเลือกดู > หน้าต่างเครื่องมือ > เครื่องมือวิเคราะห์

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

Perfetto

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

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

วิเคราะห์งานที่กําหนดเวลาไว้ของแอป

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

ใช้ Battery Historian เพื่อตรวจสอบการดําเนินการของงานที่ตั้งเวลาไว้ ทั้งโดยรวม (สถิติระบบ > สถิติ JobScheduler) และตามแอป (สถิติแอป > งานที่ตั้งเวลาไว้) ตรวจสอบจํานวนทั้งหมดและระยะเวลาทั้งหมด

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

นอกจากนี้ ให้ตรวจสอบกราฟ Battery Historian โดยดูที่รายการ JobScheduler แต่ละรายการ เมื่อคุณวางเคอร์เซอร์เหนือรายการใดรายการหนึ่ง เครื่องมือวิเคราะห์แบตเตอรี่จะแสดงเจ้าของงานที่ดําเนินการอยู่ ลองพิจารณาสิ่งเหล่านี้

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

เซ็นเซอร์

อุปกรณ์ Wear OS มีเซ็นเซอร์หลายอย่าง เช่น GPS ในกรณีส่วนใหญ่ ให้ใช้บริการสุขภาพใน Wear OS แทนการโต้ตอบกับ SensorManager โดยตรง ในหลายกรณี บริการข้อมูลสุขภาพจะจัดกลุ่มข้อมูลอย่างชาญฉลาดเพื่อปรับปรุงประสิทธิภาพแบตเตอรี่

หากต้องการวิเคราะห์การใช้งานเซ็นเซอร์ในแอป ให้เรียกใช้คําสั่งต่อไปนี้ในหน้าต่างเทอร์มินัลบนเครื่องที่ใช้พัฒนา

adb shell dumpsys sensorservice

ผลลัพธ์ของคําสั่งนี้จะแสดงข้อมูลต่อไปนี้

  • การลงทะเบียนเซ็นเซอร์ปัจจุบันและที่ผ่านมา
  • การกําหนดค่าเซ็นเซอร์ รวมถึงการแยกกลุ่มหากตั้งค่าไว้
  • ข้อมูลที่สุ่มตัวอย่างล่าสุด

ทดสอบการยกเลิกการลงทะเบียนจากเซ็นเซอร์

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

  1. ปัดแอปออก
  2. แตะหน้าจอด้วยฝ่ามือ ซึ่งจะปิดหน้าจอหรือทำให้หน้าจออยู่ในโหมดแอมเบียนท์

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

ชั้นข้อมูล

เมื่อใช้ Data Layer API การส่งแต่ละครั้งจะใช้พลังงานบางส่วน โดยเฉพาะอย่างยิ่ง หากคุณใช้ API นี้เพื่อส่งข้อมูล แอปของคุณจะต้องตื่นขึ้นเพื่อรับข้อมูล ด้วยเหตุนี้ คุณจึงควรใช้ API นี้อย่างระมัดระวัง

แนวทางปฏิบัติแนะนำเพิ่มเติมในการใช้ Data Layer API มีดังนี้

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

    ส่งเฉพาะการเปลี่ยนแปลงสถานะที่อัปเดต UI ของคุณ เช่น หากหน้าจอกิจกรรมแสดงเฉพาะ "ระยะทางที่วิ่ง" เป็นทศนิยม 1 ตำแหน่ง อย่าส่งการเปลี่ยนแปลงสถานะไปยัง Wear OS ทุกครั้งที่ผู้ใช้เดินไปอีก 1 เมตร

หากต้องการวิเคราะห์การใช้งาน Data Layer API ในแอป ให้เรียกใช้คําสั่งต่อไปนี้ในหน้าต่างเทอร์มินัลบนเครื่องที่ใช้พัฒนา

adb shell dumpsys activity service WearableService

ผลลัพธ์ของคําสั่งนี้ ได้แก่

  • RpcService: ช่วยให้คุณดูความถี่และเส้นทางที่มีการเรียกใช้โดยใช้ MessageClient
  • DataService: ช่วยให้คุณดูความถี่ในการตั้งค่ารายการข้อมูลได้โดยใช้ DataClient

แอปสุขภาพและการออกกำลังกาย

หากคุณดูแลแอปสุขภาพและการออกกำลังกาย ให้ใช้บริการสุขภาพเพื่อเพิ่มประสิทธิภาพการใช้เซ็นเซอร์ของแอป

  • สำหรับ ExerciseClient ให้ใช้ Battery Historian เพื่อตรวจสอบลักษณะการทำงานที่ถูกต้องในโหมดแอมเบียนท์ ตรวจสอบว่าแอปไม่ได้ตื่นขึ้นบ่อยกว่าทุกๆ 1-2 นาทีเพื่อรับข้อมูล ExerciseUpdate
  • หากต้องการตรวจสอบสุขภาพทั่วไปตลอดทั้งวัน ให้ใช้ PassiveMonitoringClient ตามที่อธิบายไว้ในคู่มือเกี่ยวกับวิธีตรวจสอบข้อมูลสุขภาพและการออกกำลังกายในเบื้องหลัง

การ์ดและข้อมูลแทรก

หากแอปรองรับการ์ดหรือข้อมูลแทรก ให้ทำตามแนวทางปฏิบัติแนะนำต่อไปนี้

  • ปิดใช้การรีเฟรชอัตโนมัติ หรือเพิ่มอัตราการรีเฟรชเป็น 2 ชั่วโมงหรือนานกว่านั้น
  • ใช้ Firebase Cloud Messaging (FCM) หรืองานที่ตั้งเวลาไว้อย่างเหมาะสมเพื่อส่งการอัปเดตข้อมูล โปรดระมัดระวังไม่ให้การอัปเดตมีอัตราที่เร็วเกินไป ซึ่งอาจทําให้ระบบกําหนดเวลางานซ้ำๆ ในอัตราที่เร็วกว่าที่ผู้ใช้หรือแพลตฟอร์มจะเข้าถึงข้อมูลที่จําเป็นสําหรับทํางานนั้นได้
  • อย่าตั้งเวลาทํางานของการ์ดหรือข้อมูลแทรกเมื่อผู้ใช้ไม่ได้โต้ตอบกับการ์ดหรือข้อมูลแทรก
  • ใช้แนวทางแบบออฟไลน์ก่อน
  • แชร์ฐานข้อมูลเดียวในแอปหลัก ข้อมูลแทรก และข้อมูลแทรก วิธีนี้ยังช่วยให้ข้อมูลมีความสอดคล้องกันในแพลตฟอร์ม UI ด้วย