Tối ưu hóa mặt đồng hồ

Mặt đồng hồ Wear OS liên tục hoạt động nên phải sử dụng nguồn điện một cách hiệu quả.

Tối ưu hóa hiệu suất của mặt đồng hồ nhiều nhất có thể. Các dịch vụ không được thực hiện các phép tính không cần thiết. Các mặt đồng hồ có ảnh động phải chạy mượt mà trong khi vẫn hỗ trợ được thông báo và chỉ báo hệ thống.

Tối ưu hóa những yếu tố cơ bản

Phần này trình bày các phương pháp hay nhất để cải thiện mức độ hiệu quả.

Màu sắc và độ sáng của mặt đồng hồ

Màu tối giúp tiết kiệm pin của đồng hồ. Dưới đây là đề xuất về cách đặt nền mặt đồng hồ để tối ưu hóa mức sử dụng pin của mặt đồng hồ:

  • Màu Nếu có thể, hãy dùng nền đen.
  • Độ sáng. Khi các yêu cầu của mặt đồng hồ ngăn việc sử dụng màu nền đen, bạn nên cố gắng duy trì độ sáng của màu nền ở mức bằng hoặc dưới 25% trên thang HSV (tông màu, độ bão hòa màu, giá trị màu) hoặc HSB. Chẳng hạn nếu bạn sử dụng lớp Color để đặt màu nền và xác định màu bằng thang HSV, bạn sẽ sử dụng mức 25 trở xuống cho cài đặt Giá trị (nghĩa là đối với cài đặt độ sáng).

Sử dụng các tính năng linh hoạt để tương tác với điện thoại

Khi mặt đồng hồ yêu cầu một thao tác để chạy trên điện thoại, hãy chỉ thực thi mã khi mặt đồng hồ đang hoạt động. Sử dụng phương thức đề xuất API CapabilityClient để cho phép ứng dụng trên điện thoại biết mặt đồng hồ tương ứng đang hoạt động.

Theo dõi mức tiêu thụ điện năng

Ứng dụng đồng hành của Wear OS cho phép các nhà phát triển và người dùng xem mức tiêu thụ pin do các quy trình khác nhau sử dụng trên thiết bị đeo (trong phần Cài đặt > Pin đồng hồ.)

Đăng ký mặt đồng hồ nhận biết được mã hóa

Android 7.0 trở lên có hỗ trợ mã hóa dựa trên tệp và cho phép các ứng dụng nhận biết được mã hóa chạy trước khi người dùng cung cấp mật mã giải mã khi khởi động. Điều này có thể làm giảm thời lượng chuyển đổi từ ảnh động khởi động sang mặt đồng hồ tới 30 giây.

Để bật tính năng khởi động nhanh hơn, hãy thêm android:directBootAware="true" vào tệp kê khai mặt đồng hồ.

Lưu ý: Hãy sử dụng tính năng này với mặt đồng hồ không sử dụng bộ nhớ đã mã hóa thông tin xác thực.

Các phương pháp hay nhất về ảnh động

Các phương pháp hay nhất trong phần này giúp giảm mức tiêu thụ điện năng của ảnh động.

Giảm tốc độ khung hình của ảnh động

Ảnh động thường có chi phí tính toán tốn kém và tiêu tốn một lượng điện năng đáng kể. Hầu hết các ảnh động đều trông mượt mà ở mức 30 khung hình/giây. Vì vậy bạn nên tránh chạy ảnh động ở tốc độ khung hình cao hơn. Thay vào đó, bạn có thể sử dụng tốc độ khung hình động. Để biết thêm thông tin, vui lòng xem Mặt đồng hồ Canvas mẫu.

Cho phép CPU ngủ giữa các ảnh động

Ảnh động và các thay đổi nhỏ về nội dung của mặt đồng hồ sẽ đánh thức CPU. Mặt đồng hồ của bạn phải cho phép CPU ngủ giữa các ảnh động. Chẳng hạn như bạn có thể sử dụng các loạt ảnh động ngắn mỗi giây ở chế độ tương tác, sau đó để CPU ngủ cho đến giây tiếp theo. Việc để CPU thường xuyên ngủ, thậm chí trong một thời gian ngắn, có thể làm giảm đáng kể mức tiêu thụ điện năng.

Để tăng tối đa thời lượng pin, hãy hạn chế dùng ảnh động. Ngay cả dấu hai chấm nhấp nháy cũng đánh thức CPU sau mỗi lần nhấp nháy đồng thời gây ảnh hưởng đến thời lượng pin.

Giảm dung lượng của thành phần bitmap

Nhiều mặt đồng hồ bao gồm một hình nền và các thành phần đồ họa khác được biến đổi và chồng lên trên hình nền, chẳng hạn như kim đồng hồ và các thành phần khác của thiết kế cũng di chuyển theo thời gian. Các thành phần đồ họa này càng lớn thì càng tiêu tốn chi phí tính toán để chuyển đổi các thành phần đó. Thông thường, các thành phần đồ họa này được xoay (và đôi khi được điều chỉnh theo tỷ lệ) bên trong phương thức Render.CanvasRenderer.render() mỗi khi hệ thống vẽ lại mặt đồng hồ, như mô tả trong phần Vẽ mặt đồng hồ.

Hình 1. Cắt kim đồng hồ để loại bỏ các pixel thừa.

Để cải thiện hiệu suất của mặt đồng hồ, hãy làm như sau:

  • Không sử dụng các thành phần đồ họa lớn hơn mức cần thiết.
  • Loại bỏ các pixel thừa trong suốt xung quanh cạnh.

Giảm 97% kích thước của kim đồng hồ mẫu ở phía bên trái của Hình 1.

Việc giảm kích thước của các thành phần bitmap như mô tả trong phần này không chỉ giúp cải thiện hiệu suất của ảnh động, mà còn tiết kiệm điện năng.

Kết hợp các thành phần bitmap

Nếu bạn có các bitmap thường được vẽ cùng nhau, hãy cân nhắc kết hợp các bitmap này vào cùng một thành phần đồ họa. Thường thì bạn có thể kết hợp hình nền ở chế độ tương tác với các dấu kiểm để tránh vẽ hai bitmap toàn màn hình mỗi khi hệ thống vẽ lại mặt đồng hồ.

Tắt tính năng khử răng cưa khi vẽ các bitmap được điều chỉnh theo tỷ lệ

Khi vẽ một bitmap được điều chỉnh theo tỷ lệ trên đối tượng Canvas bằng cách sử dụng phương thức Canvas.drawBitmap(), bạn có thể cung cấp một thực thể Paint để định cấu hình một số tùy chọn. Để cải thiện hiệu suất, hãy tắt tính năng khử răng cưa bằng phương thức setAntiAlias(), vì tùy chọn này không có bất kỳ ảnh hưởng nào đến bitmap.

Hình 2. Ví dụ về cách lọc bitmap bị tắt (bên trái) và bật (phải).

Dùng bộ lọc bitmap

Đối với thành phần bitmap mà bạn vẽ dựa trên các phần tử khác, hãy bật tính năng lọc bitmap trên cùng một phiên bản Paint bằng cách sử dụng phương thức setFilterBitmap(). Hình 2 cho thấy chế độ xem phóng to của kim đồng hồ khi có và không có lọc bitmap.

Lưu ý: Ở chế độ môi trường xung quanh có bit thấp, hệ thống không hiển thị màu sắc trong ảnh một cách đáng tin cậy để xử lý thành công quá trình lọc bitmap. Khi chế độ môi trường xung quanh đang hoạt động, hãy tắt tính năng lọc bitmap.

Di chuyển các toán tử tốn kém ra ngoài phương thức vẽ

Hệ thống sẽ gọi phương thức Render.CanvasRenderer.render() mỗi khi vẽ lại mặt đồng hồ, vì vậy bạn chỉ nên bao gồm các thao tác cần thiết để cập nhật mặt đồng hồ bên trong phương thức này để cải thiện hiệu suất.

Khi có thể, hãy tránh thực hiện những thao tác này bên trong phương thức Render.CanvasRenderer.render():

  • Đang tải hình ảnh và các tài nguyên khác.
  • Đang đổi kích thước hình ảnh.
  • Phân bổ đối tượng.
  • Thực hiện phép tính có kết quả không thay đổi giữa các khung hình.

Để phân tích hiệu suất của mặt đồng hồ, hãy sử dụng Trình phân tích CPU. Cụ thể, phải đảm bảo thời gian thực thi Render.CanvasRenderer.render() của bạn ngắn và nhất quán giữa các lệnh gọi. Để biết thêm thông tin, vui lòng xem bài viết Ghi lại và kiểm tra hoạt động tìm dấu vết phương thức.

Mẫu WatchFace minh họa các phương pháp hay nhất để định cấu hình mặt đồng hồ.