หน้าปัด Wear OS ทำงานอย่างต่อเนื่อง จึงต้องใช้พลังงานอย่างมีประสิทธิภาพ
เพิ่มประสิทธิภาพหน้าปัดให้มากที่สุด หน้านี้นำเสนอแนวทางปฏิบัติแนะนำสำหรับการเพิ่มประสิทธิภาพหน้าปัดโดยรวม รวมถึงแนวทางปฏิบัติที่ดีที่สุดที่กำหนดเป้าหมายไปยังภาพเคลื่อนไหวและรูปภาพ
การเพิ่มประสิทธิภาพขั้นพื้นฐาน
ส่วนนี้มีแนวทางปฏิบัติแนะนำในการปรับปรุงประสิทธิภาพโดยรวมของหน้าปัด
สีและความสว่างของหน้าปัด
การใช้สีเข้มในหน้าปัดจะดึงพลังงานจากนาฬิกาของผู้ใช้น้อยลง ต่อไปนี้คือคำแนะนำสำหรับการตั้งค่าพื้นหลังของหน้าปัดเพื่อเพิ่มประสิทธิภาพการใช้แบตเตอรี่ของหน้าปัด
- สี: ใช้พื้นหลังสีดำเมื่อเป็นไปได้
- ความสว่าง: เมื่อใช้พื้นหลังสีดําไม่ได้ ให้รักษาความสว่างของสีพื้นหลังให้อยู่ที่ระดับไม่เกิน 25% บนมาตราส่วนสี ระดับสี ความสว่าง (HSV) หรือสี ระดับสี ความสว่าง (HSB) ตัวอย่างเช่น หากใช้คลาส
Color
เพื่อกำหนดสีพื้นหลังที่กําหนดด้วยรูปแบบ HSV ให้ใช้ค่า 25 หรือต่ำกว่าในการตั้งค่าค่า ซึ่งจะควบคุมความสว่าง
ใช้ความสามารถแบบไดนามิกเพื่อโต้ตอบกับโทรศัพท์
เมื่อหน้าปัดกำหนดให้มีการดำเนินการในโทรศัพท์ ให้เรียกใช้โค้ดเฉพาะเมื่อหน้าปัดทำงานอยู่ วิธีที่เราแนะนำในการแจ้งให้แอปในโทรศัพท์ทราบว่าหน้าปัดที่เกี่ยวข้องทำงานอยู่คือ CapabilityClient API
ตรวจสอบการใช้พลังงาน
แอปที่ใช้ร่วมกันของ Wear OS ช่วยให้นักพัฒนาแอปและผู้ใช้เห็นปริมาณแบตเตอรี่ที่ใช้ไปโดยกระบวนการต่างๆ ในอุปกรณ์ที่สวมใส่ได้ หากต้องการดูข้อมูลนี้ ให้ไปที่การตั้งค่า > นาฬิกา แบตเตอรี่
ลงทะเบียนหน้าปัดที่รองรับการเข้ารหัส
Android 7.0 ขึ้นไปรองรับการเข้ารหัสแบบไฟล์และอนุญาตให้แอปพลิเคชันที่รับรู้การเข้ารหัสทำงานได้ก่อนที่ผู้ใช้จะป้อนรหัสผ่านสำหรับการถอดรหัสเมื่อเปิดเครื่อง ซึ่งจะลดระยะเวลาการเปลี่ยนจากภาพเคลื่อนไหวในการบูตไปยังหน้าปัดได้สูงสุด 30 วินาที
หากต้องการเปิดใช้การบูตที่เร็วขึ้น ให้เพิ่ม android:directBootAware="true"
ลงในไฟล์ Manifest ของหน้าปัด
หมายเหตุ: ใช้ฟีเจอร์นี้กับหน้าปัดที่ไม่ได้ใช้พื้นที่เก็บข้อมูลที่เข้ารหัสข้อมูลเข้าสู่ระบบ
แนวทางปฏิบัติแนะนำสำหรับภาพเคลื่อนไหว
แนวทางปฏิบัติแนะนำในส่วนนี้จะช่วยประหยัดพลังงานที่เกี่ยวข้องกับภาพเคลื่อนไหว
ลดอัตราเฟรมของภาพเคลื่อนไหว
ภาพเคลื่อนไหวมักใช้การประมวลผลที่มากและใช้พลังงานอย่างมหาศาล ภาพเคลื่อนไหวส่วนใหญ่จะดูลื่นไหลเมื่อแสดงที่ 30 เฟรมต่อวินาที ดังนั้นโปรดหลีกเลี่ยงการแสดงภาพเคลื่อนไหวที่อัตราเฟรมสูงกว่านี้ แต่จะใช้อัตราเฟรมแบบไดนามิกแทนได้ สำหรับข้อมูลเพิ่มเติม โปรดดู ตัวอย่างหน้าปัดบน Canvas
ปล่อยให้ CPU อยู่ในโหมดสลีประหว่างภาพเคลื่อนไหว
ใช้ภาพเคลื่อนไหวเท่าที่จําเป็นเพื่อยืดอายุการใช้งานแบตเตอรี่ แม้แต่โคลอนที่กะพริบก็ใช้พลังงานแบตเตอรี่ทุกครั้งที่กะพริบ
ภาพเคลื่อนไหวและการเปลี่ยนแปลงเล็กๆ น้อยๆ ในเนื้อหาของหน้าปัดจะปลุก CPU ปล่อยให้ CPU เข้าสู่โหมดสลีประหว่างภาพเคลื่อนไหวด้วยการแสดงภาพเคลื่อนไหวสั้นๆ ทุกวินาทีในโหมดอินเทอร์แอกทีฟ จากนั้นปล่อยให้ CPU เข้าสู่โหมดสลีปจนถึงวินาทีถัดไป เป็นต้น การทำให้ CPU เข้าสู่โหมดสลีปบ่อยครั้งแม้จะเป็นช่วงสั้นๆ ก็ช่วยลดการใช้พลังงานได้อย่างมาก
แนวทางปฏิบัติแนะนำสำหรับรูปภาพ
แนวทางปฏิบัติแนะนำในส่วนนี้จะช่วยประหยัดพลังงานที่เกี่ยวข้องกับรูปภาพ
ลดขนาดเนื้อหาบิตแมป
หน้าปัดจำนวนมากประกอบด้วยภาพพื้นหลังและเนื้อหาอื่นๆ กราฟิกที่เปลี่ยนรูปแบบและวางซ้อนบนภาพพื้นหลัง เช่น เข็มนาฬิกา และองค์ประกอบอื่นๆ ที่เคลื่อนไหวเมื่อเวลาผ่านไป ยิ่งชิ้นงานกราฟิกมีขนาดใหญ่เท่าใด การเปลี่ยนรูปแบบก็จะยิ่งใช้การประมวลผลมากขึ้นเท่านั้น โดยปกติแล้ว องค์ประกอบกราฟิกเหล่านี้จะมีการหมุนและบางครั้งก็ปรับขนาดภายในเมธอด
Render.CanvasRenderer.render()
ทุกครั้งที่ระบบวาดหน้าปัดอีกครั้ง ตามที่อธิบายไว้ในวาดหน้าปัด
การลดขนาดชิ้นงานบิตแมปจะช่วยปรับปรุงประสิทธิภาพของภาพเคลื่อนไหวและประหยัดพลังงาน ทำตามเคล็ดลับต่อไปนี้เพื่อปรับปรุงประสิทธิภาพของหน้าปัด
- อย่าใช้องค์ประกอบกราฟิกที่ใหญ่เกินความจำเป็น
- นำพิกเซลโปร่งแสงส่วนเกินรอบๆ ขอบออก
ตัวอย่างเช่น ขนาดของรูปเข็มนาฬิกาทางด้านซ้ายในรูปภาพ 1 สามารถลดลงได้ 97% ด้วยการนำพิกเซลที่โปร่งใสออก ดังที่แสดงทางด้านขวาของรูปภาพ
รวมชิ้นงานบิตแมป
หากมีบิตแมปที่มักวาดร่วมกัน ให้พิจารณารวมบิตแมปเหล่านั้นเป็นชิ้นงานกราฟิกชิ้นเดียว เช่น คุณอาจรวมภาพพื้นหลังในโหมดอินเทอร์แอกทีฟเข้ากับเครื่องหมายจุดเพื่อหลีกเลี่ยงการวาดบิตแมปแบบเต็มหน้าจอ 2 รายการทุกครั้งที่ระบบวาดหน้าปัดใหม่
ปิดใช้การลบรอยหยักเมื่อวาดบิตแมปที่ปรับขนาด
เมื่อวาดบิตแมปที่ปรับขนาดแล้วบนออบเจ็กต์ Canvas
โดยใช้เมธอด
Canvas.drawBitmap()
คุณสามารถระบุอินสแตนซ์ Paint
เพื่อกำหนดค่าตัวเลือกต่างๆ ได้ หากต้องการปรับปรุงประสิทธิภาพ ให้ปิดใช้การลบรอยหยักโดยใช้วิธี setAntiAlias()
เนื่องจากตัวเลือกนี้ไม่มีผลกับบิตแมป
ใช้การกรองแบบบิตแมป
สำหรับชิ้นงานบิตแมปที่คุณวาดไว้บนองค์ประกอบอื่นๆ ให้เปิดใช้การกรองบิตแมปในPaint
อินสแตนซ์เดียวกันโดยใช้วิธี setFilterBitmap()
รูปที่ 2 แสดงมุมมองที่ขยายใหญ่ของเข็มนาฬิกาที่มีและไม่มีการใช้การกรองบิตแมป
หมายเหตุ: เมื่อเปิดใช้งานโหมดแอมเบียนท์ ให้ปิดใช้การกรองบิตแมป ในโหมดแอมเบียนท์แบบบิตต่ำ ระบบจะแสดงผลสีในรูปภาพอย่างไม่ถูกต้องเพื่อให้การกรองบิตแมปดำเนินการเสร็จสมบูรณ์
ย้ายการดำเนินการที่มีค่าใช้จ่ายสูงออกจากวิธีการวาด
ระบบจะเรียกใช้Render.CanvasRenderer.render()
เมธอดทุกครั้งที่วาดหน้าปัดใหม่ หากต้องการปรับปรุงประสิทธิภาพ ให้รวมเฉพาะการดำเนินการภายในเมธอดนี้ที่จำเป็นอย่างยิ่งสำหรับการอัปเดตหน้าปัด
หลีกเลี่ยงการดำเนินการต่อไปนี้ภายในเมธอด Render.CanvasRenderer.render()
เมื่อเป็นไปได้
- การโหลดรูปภาพและทรัพยากรอื่นๆ
- การปรับขนาดรูปภาพ
- กำลังจัดสรรวัตถุ
- การคํานวณที่ผลลัพธ์ไม่เปลี่ยนแปลงระหว่างเฟรม
หากต้องการวิเคราะห์ประสิทธิภาพของหน้าปัด ให้ใช้เครื่องมือวิเคราะห์ CPU โดยเฉพาะอย่างยิ่ง ให้ตรวจสอบว่าเวลาในการเรียกใช้Render.CanvasRenderer.render()
ของคุณสั้นและสม่ำเสมอในการเรียกใช้ ดูข้อมูลเพิ่มเติมได้ที่ตรวจสอบกิจกรรมของ CPU ด้วยเครื่องมือวิเคราะห์โปรไฟล์ CPU
แหล่งข้อมูลที่เกี่ยวข้อง
แอปตัวอย่างหน้าปัดแสดงแนวทางปฏิบัติแนะนำสำหรับการกำหนดค่าหน้าปัด