Tối ưu hoá mức sử dụng bộ nhớ cho mặt đồng hồ

Để cung cấp thời lượng pin tốt nhất có thể cho thiết bị Wear OS, hệ thống thực hiện một phép tính về mức sử dụng bộ nhớ. Là một phần trong chất lượng của ứng dụng Wear OS , những mặt đồng hồ sử dụng Định dạng mặt đồng hồ sẽ có giới hạn về dung lượng bộ nhớ mà chúng có thể tiêu thụ, tuỳ thuộc vào trạng thái hiện tại của đồng hồ:

  • chế độ môi trường xung quanh, mặt đồng hồ không được sử dụng quá 10 MB bộ nhớ.
  • Ở chế độ tương tác, mặt đồng hồ không được sử dụng quá 100 MB bộ nhớ.

Hệ thống tính toán mức sử dụng bộ nhớ của mặt đồng hồ

Để tính toán kích thước của hình ảnh hoặc phông chữ bitmap trong mặt đồng hồ sử dụng Định dạng mặt đồng hồ, thì hệ thống sẽ hoàn tất các bước sau:

  1. Giải nén hình ảnh hoặc phông chữ bitmap.
  2. Kiểm tra phông chữ bitmap hoặc hình ảnh để xem liệu hình ảnh hoặc phông chữ đó có thể được tối ưu hoá ở một trong các cách sau:
    • Đã đổi kích thước cho phù hợp hơn với kích thước hiển thị.
    • Đã cắt để xóa các pixel hoàn toàn trong suốt.
    • Giảm mẫu xuống RGB565, nếu có thể thực hiện việc này mà không mất độ trung thực.

Dựa trên hộp giới hạn thu được, hệ thống sẽ tính toán kích thước của hình ảnh hoặc phông chữ bitmap, tính bằng byte, như một trong các kiểu sau:

  • Đối với hình ảnh và phông chữ sử dụng RGBA8888: \( 4 \times width \times height \)
  • Đối với hình ảnh và phông chữ sử dụng RGB565: \( 2 \times width \times height \)
  • Đối với hình ảnh và phông chữ sử dụng cấu hình bitmap ALPHA_8: \( width \times height \)

Chế độ tương tác

Khi tính toán mức sử dụng bộ nhớ cho chế độ tương tác, hệ thống sẽ tính tổng của các giá trị sau:

  1. Kích thước chưa xử lý của mọi phông chữ vectơ.
  2. Mức sử dụng ước tính phông chữ mặc định của hệ thống.
  3. Tổng kích thước của hình ảnh và phông chữ bitmap sau khi cắt, đổi kích thước, hoặc định dạng lại đã được áp dụng.

Cấu hình

Đối với các mặt đồng hồ có chứa cấu hình, hệ thống sẽ cố gắng tính toán tổng kích thước của các tài nguyên được sử dụng trong các cấu hình khác nhau. Đôi khi, khi có rất nhiều tổ hợp, hệ thống ước tính hơi cao hơn số lượng tài nguyên được sử dụng đồng thời trên các cấu hình khác nhau.

Chế độ môi trường xung quanh và lớp

Đối với chế độ môi trường xung quanh, hệ thống giả định rằng đồng hồ kết xuất bằng tối đa ba lớp toàn màn hình, hai lớp trong số đó là hoàn toàn tĩnh:

  1. Mọi thứ bên dưới các thành phần của đồng hồ. Hầu hết "phần thân" của mặt đồng hồ là được kết hợp vào lớp này. Không quan trọng là bạn sử dụng bao nhiêu hình ảnh để vẽ lớp này; hệ thống sẽ tính hình ảnh đó là một hình ảnh toàn màn hình.
  2. Kim đồng hồ, màn hình kỹ thuật số hoặc chức năng có thể liên kết với nền tảng được hiển thị động.
  3. Tất cả các phần tử được liệt kê sau kim đồng hồ và chức năng trong tệp XML nguồn.

Thông thường, hầu hết mức sử dụng bộ nhớ ở chế độ môi trường xung quanh đều đến từ phông chữ bitmap, đặc biệt số lượng lớn.

Phương pháp giảm mức sử dụng bộ nhớ

Bằng cách làm theo các đề xuất trong phần này, bạn có nhiều khả năng tạo ra mặt đồng hồ có mức sử dụng bộ nhớ nằm trong giới hạn này.

Cắt và đổi kích thước phông chữ bitmap

Cắt hình ảnh và các đối tượng BitmapFont, sau đó đổi kích thước cho phù hợp với kích thước hiển thị.

Khi Wear OS vẽ một mặt đồng hồ, mọi hình ảnh đều sẽ được giải nén. Một hình ảnh toàn màn hình gần như trống có thể chiếm 3 KB trên ổ đĩa, nhưng nếu hình ảnh đó hiển thị trên màn hình 450 pixel x 450 pixel, hệ thống sẽ giải nén hình ảnh đó, tăng kích thước của hình ảnh đó trong bộ nhớ lên đến 750 KB hoặc lớn hơn.

Sử dụng chiều cao nhất quán cho phông chữ bitmap

Khi sử dụng BitmapFont, mọi hình ảnh cho một ký tự phải có cùng chiều cao. Tương tự, mọi hình ảnh cho các từ phải có cùng chiều cao.

Sử dụng kích thước khung hình nhất quán trong ảnh động

Thay vì di chuyển hình ảnh trên mặt đồng hồ, hãy cập nhật các phần tử trong hình ảnh và giữ hộp giới hạn ở cùng vị trí tương ứng với mặt đồng hồ. Ví dụ: nếu bạn muốn tạo ảnh động cho một vòng tròn trên mặt đồng hồ, hãy cân nhắc thay đổi màu của một vòng tròn thay vì lăn vòng tròn đó trên đồng hồ khuôn mặt.

Kỹ thuật này làm giảm kích thước của hộp giới hạn mà hệ thống tính toán cho ảnh động.

Loại bỏ hình ảnh trùng lặp

Nếu mặt đồng hồ hiện nhiều bản sao của cùng một hình ảnh, vui lòng chỉ cung cấp một bản sao bản sao của hình ảnh đó trong thư mục tài nguyên của bạn và tham chiếu nó lần.

Hiện tiến trình bằng các vòng cung

Để mô phỏng một thanh tiến trình chạy xong sau 1 phút hoặc sau 1 giờ, đừng sử dụng 60 hình ảnh riêng biệt. Thay vào đó, hãy tạo một đối tượng Arc chứa một biểu thức kiểm soát độ dài của đối tượng đó, như minh hoạ trong đoạn mã sau:

<PartDraw angle="0" width="400" height="400" name="ProgressBar"
          pivotX="0.5" pivotY="0.5 x="40" y="40">
    <Arc centerX="200" centerY="200" width="400" height="400"
         startAngle="0" endAngle="360">
        <!-- Completes a "progress loop" every minute. -->
        <Transform target="endAngle"
                   value="0 + (clamp([SECOND], 0, 60) - 0) * 6" />
        <Stroke cap="ROUND" color="#123456" thickness="10" />
    </Arc>
</PartDraw>

Để hiện một đường không liên tục, chẳng hạn như để có giao diện kiểu đồng hồ kỹ thuật số theo phong cách xưa cũ, hãy sử dụng thuộc tính dấu gạch ngang cho đối tượng Stroke hoặc lớp ảnh dạng mặt nạ nửa trong suốt.

Đặt kim đồng hồ và chức năng ở cuối tệp nguồn

Các nút XML được vẽ theo thứ tự được liệt kê trong tệp XML nguồn. Theo đặt kim đồng hồ và các chức năng ở cuối tệp, hệ thống loại bỏ toàn bộ một lớp khỏi phép tính bộ nhớ chế độ môi trường xung quanh.

Đánh giá mức sử dụng bộ nhớ của mặt đồng hồ

Để đo mức sử dụng bộ nhớ của mặt đồng hồ, hãy sử dụng mức sử dụng bộ nhớ công cụ đánh giá có trong kho lưu trữ watchface trên GitHub.

  • Lưu ý: văn bản có đường liên kết sẽ hiện khi JavaScript tắt
  • Arc
  • Dòng
  • Rectangle