เพิ่มประสิทธิภาพหน้าปัด

หน้าปัด 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 ครอบตัดเข็มนาฬิกาเพื่อนำพิกเซลส่วนเกินออก

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

  • อย่าใช้องค์ประกอบกราฟิกที่ใหญ่เกินความจำเป็น
  • นำพิกเซลโปร่งแสงส่วนเกินรอบๆ ขอบออก

ตัวอย่างเช่น ขนาดของรูปเข็มนาฬิกาทางด้านซ้ายในรูปภาพ 1 สามารถลดลงได้ 97% ด้วยการนำพิกเซลที่โปร่งใสออก ดังที่แสดงทางด้านขวาของรูปภาพ

รวมชิ้นงานบิตแมป

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

ปิดใช้การลบรอยหยักเมื่อวาดบิตแมปที่ปรับขนาด

เมื่อวาดบิตแมปที่ปรับขนาดแล้วบนออบเจ็กต์ Canvas โดยใช้เมธอด Canvas.drawBitmap() คุณสามารถระบุอินสแตนซ์ Paint เพื่อกำหนดค่าตัวเลือกต่างๆ ได้ หากต้องการปรับปรุงประสิทธิภาพ ให้ปิดใช้การลบรอยหยักโดยใช้วิธี setAntiAlias() เนื่องจากตัวเลือกนี้ไม่มีผลกับบิตแมป

รูปที่ 2 ตัวอย่างการกรองบิตแมปที่ปิดใช้ (ซ้าย) และเปิดใช้ (ขวา)

ใช้การกรองแบบบิตแมป

สำหรับชิ้นงานบิตแมปที่คุณวาดไว้บนองค์ประกอบอื่นๆ ให้เปิดใช้การกรองบิตแมปในPaintอินสแตนซ์เดียวกันโดยใช้วิธี setFilterBitmap() รูปที่ 2 แสดงมุมมองที่ขยายใหญ่ของเข็มนาฬิกาที่มีและไม่มีการใช้การกรองบิตแมป

หมายเหตุ: เมื่อเปิดใช้งานโหมดแอมเบียนท์ ให้ปิดใช้การกรองบิตแมป ในโหมดแอมเบียนท์แบบบิตต่ำ ระบบจะแสดงผลสีในรูปภาพอย่างไม่ถูกต้องเพื่อให้การกรองบิตแมปดำเนินการเสร็จสมบูรณ์

ย้ายการดำเนินการที่มีค่าใช้จ่ายสูงออกจากวิธีการวาด

ระบบจะเรียกใช้Render.CanvasRenderer.render() เมธอดทุกครั้งที่วาดหน้าปัดใหม่ หากต้องการปรับปรุงประสิทธิภาพ ให้รวมเฉพาะการดำเนินการภายในเมธอดนี้ที่จำเป็นอย่างยิ่งสำหรับการอัปเดตหน้าปัด

หลีกเลี่ยงการดำเนินการต่อไปนี้ภายในเมธอด Render.CanvasRenderer.render() เมื่อเป็นไปได้

  • การโหลดรูปภาพและทรัพยากรอื่นๆ
  • การปรับขนาดรูปภาพ
  • กำลังจัดสรรวัตถุ
  • การคํานวณที่ผลลัพธ์ไม่เปลี่ยนแปลงระหว่างเฟรม

หากต้องการวิเคราะห์ประสิทธิภาพของหน้าปัด ให้ใช้เครื่องมือวิเคราะห์ CPU โดยเฉพาะอย่างยิ่ง ให้ตรวจสอบว่าเวลาในการเรียกใช้Render.CanvasRenderer.render()ของคุณสั้นและสม่ำเสมอในการเรียกใช้ ดูข้อมูลเพิ่มเติมได้ที่ตรวจสอบกิจกรรมของ CPU ด้วยเครื่องมือวิเคราะห์โปรไฟล์ CPU

แอปตัวอย่างหน้าปัดแสดงแนวทางปฏิบัติแนะนำสำหรับการกำหนดค่าหน้าปัด