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

Để mang lại thời lượng pin tốt nhất có thể cho thiết bị Wear OS, hệ thống sẽ thực hiện tính toán mức sử dụng bộ nhớ. Theo Nguyên tắc về chất lượng của ứng dụng Wear OS, các 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ớ có thể sử dụng, 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 mà phông chữ hình ảnh hoặc bitmap chiếm trong mặt đồng hồ sử dụng Định dạng mặt đồng hồ, hệ thống sẽ hoàn tất các bước sau:

  1. Giải nén phông chữ hình ảnh hoặc bitmap.
  2. Kiểm tra hình ảnh hoặc phông chữ bitmap để xem có thể tối ưu hoá phông chữ đó theo một trong các cách sau hay không:
    • Đã đổi kích thước cho phù hợp hơn với kích thước màn hình.
    • Được cắt để xoá các pixel hoàn toàn trong suốt.
    • Được lấy mẫu xuống thành RGB565, nếu có thể thực hiện việc này mà không làm 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, theo một trong những kích thước 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ác giá trị sau:

  1. Kích thước chưa được xử lý của bất kỳ phông chữ vectơ nào.
  2. Mức sử dụng ước tính của 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ồ 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 dùng trong nhiều cấu hình. Đôi khi, khi có rất nhiều tổ hợp, hệ thống sẽ ước tính hơi cao 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ồ được kết xuất bằng tối đa 3 lớp toàn màn hình, 2 lớp trong số đó 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ồ đều được kết hợp vào lớp này. Bất kể 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. Bất kỳ kim đồng hồ, màn hình kỹ thuật số hoặc chức năng nào có mối liên kết với nền tảng được kết xuất động.
  3. Tất cả phần tử được liệt kê sau kim đồng hồ và các 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 bắt nguồn từ phông chữ bitmap, đặc biệt là các phông chữ 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 được mặt đồng hồ có mức sử dụng bộ nhớ tuân thủ các 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 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 một vị trí so 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 vòng tròn thay vì lăn vòng tròn trên mặt đồng hồ.

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, thì bạn chỉ cần tải một bản sao của hình ảnh đó vào bộ nhớ và đưa ra một vài thành phần tham chiếu đến một hình ảnh đó.

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 tay đồng hồ và các chức năng ở cuối tệp nguồn

Nút XML được vẽ theo thứ tự đã được liệt kê trong tệp XML nguồn. Bằng cách đặt kim đồng hồ và các chức năng ở cuối tệp, hệ thống sẽ loại bỏ toàn bộ lớp khỏi quá trình tính toán 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 công cụ đánh giá mức sử dụng bộ nhớ có trong kho lưu trữ watchface trên GitHub.