คีย์เวิร์ด: 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 โดยเลือกดู > หน้าต่างเครื่องมือ > เครื่องมือวิเคราะห์
- ตรวจสอบการติดตามระบบเมื่อหน้าจอดับและอุปกรณ์เข้าสู่โหมดแอมเบียนท์
- มองหางานที่กำลังดำเนินอยู่และระดับการใช้งาน CPU ของอุปกรณ์
Perfetto
Perfetto ช่วยให้คุณบันทึกการติดตาม จากนั้นตรวจสอบแอปเพื่อดูว่ามีเธรดใดทำงานอยู่ไหมเมื่อหน้าจอปิด อุปกรณ์เข้าสู่โหมดแอมเบียนท์ หรือผู้ใช้ปิดกิจกรรมของแอป
กําหนดเหตุการณ์ที่กําหนดเองเพื่อทําเครื่องหมายเหตุการณ์ที่สําคัญของแอป ซึ่งรวมถึงเหตุการณ์เฉพาะโดเมน สําหรับแอปสื่อ การดำเนินการนี้อาจรวมถึงการดึงข้อมูลเพลย์ลิสต์ การดาวน์โหลดรายการสื่อที่เฉพาะเจาะจง การเริ่มเล่น และการหยุดเล่น เมื่อกําหนดเหตุการณ์เหล่านี้ คุณจะดูเหตุการณ์เหล่านั้นใน Perfetto และเปรียบเทียบเวลาของเหตุการณ์กับการใช้ CPU และพลังงานของแอปได้
วิเคราะห์งานที่กําหนดเวลาไว้ของแอป
งานที่ตั้งเวลาไว้ซึ่งใช้ WorkManager ช่วยให้คุณทำงานในเบื้องหลังในแอปได้ แม้ว่างานบางอย่างในเบื้องหลังจะต้องทำงานเป็นระยะๆ แต่อย่าเรียกใช้งานบ่อยเกินไปหรือเป็นเวลานาน เนื่องจากอาจทำให้แบตเตอรี่ของอุปกรณ์หมด
ใช้ Battery Historian เพื่อตรวจสอบการดําเนินการของงานที่ตั้งเวลาไว้ ทั้งโดยรวม (สถิติระบบ > สถิติ JobScheduler) และตามแอป (สถิติแอป > งานที่ตั้งเวลาไว้) ตรวจสอบจํานวนทั้งหมดและระยะเวลาทั้งหมด
- หากงานทํางานบ่อยมาก ให้ลองลดความถี่นี้
- ตรวจสอบว่าเวลาดำเนินการทั้งหมดตรงกับที่คุณคาดไว้และไม่ได้นานขึ้นมาก
นอกจากนี้ ให้ตรวจสอบกราฟ Battery Historian โดยดูที่รายการ JobScheduler แต่ละรายการ เมื่อคุณวางเคอร์เซอร์เหนือรายการใดรายการหนึ่ง เครื่องมือวิเคราะห์แบตเตอรี่จะแสดงเจ้าของงานที่ดําเนินการอยู่ ลองพิจารณาสิ่งเหล่านี้
- ระยะเวลาของการดำเนินการควรเหมาะสมกับแอป
- พิจารณาว่างานเกิดขึ้นขณะที่แอปทำงานอยู่ หรืองานแสดงถึงงานเบื้องหลังที่เกิดขึ้นเป็นระยะๆ
เซ็นเซอร์
อุปกรณ์ Wear OS มีเซ็นเซอร์หลายอย่าง เช่น GPS ในกรณีส่วนใหญ่ ให้ใช้บริการสุขภาพใน Wear OS แทนการโต้ตอบกับ SensorManager
โดยตรง ในหลายกรณี บริการข้อมูลสุขภาพจะจัดกลุ่มข้อมูลอย่างชาญฉลาดเพื่อปรับปรุงประสิทธิภาพแบตเตอรี่
หากต้องการวิเคราะห์การใช้งานเซ็นเซอร์ในแอป ให้เรียกใช้คําสั่งต่อไปนี้ในหน้าต่างเทอร์มินัลบนเครื่องที่ใช้พัฒนา
adb shell dumpsys sensorservice
ผลลัพธ์ของคําสั่งนี้จะแสดงข้อมูลต่อไปนี้
- การลงทะเบียนเซ็นเซอร์ปัจจุบันและที่ผ่านมา
- การกําหนดค่าเซ็นเซอร์ รวมถึงการแยกกลุ่มหากตั้งค่าไว้
- ข้อมูลที่สุ่มตัวอย่างล่าสุด
ทดสอบการยกเลิกการลงทะเบียนจากเซ็นเซอร์
หากต้องการตรวจสอบว่าแอปหยุดดึงข้อมูลเซ็นเซอร์ตามที่คาดไว้หรือไม่ ให้ทดสอบสถานการณ์ต่อไปนี้
- ปัดแอปออก
- แตะหน้าจอด้วยฝ่ามือ ซึ่งจะปิดหน้าจอหรือทำให้หน้าจออยู่ในโหมดแอมเบียนท์
ใช้คำสั่ง 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 ด้วย
แนะนำสำหรับคุณ
- หมายเหตุ: ข้อความลิงก์จะแสดงเมื่อ JavaScript ปิดอยู่
- เข้าถึงตำแหน่งในเบื้องหลัง
- ตั้งเวลาการปลุก
- สร้างวิดเจ็ตขั้นสูง {:#advanced-widget}