Mức sử dụng bộ nhớ bitmap

Bitmap thường là các đối tượng tiêu tốn nhiều bộ nhớ nhất trong một ứng dụng. Các thao tác giải mã và mở rộng quy mô thường nằm trên đường dẫn quan trọng để kết xuất khung hình. Việc tối ưu hoá mức sử dụng bộ nhớ bitmap giúp cải thiện đáng kể khả năng phản hồi của giao diện người dùng, thời lượng pin và độ ổn định tổng thể bằng cách giảm hiện tượng giật, lỗi ANR và các quy trình bị huỷ do hết bộ nhớ.

Xác định mức sử dụng bộ nhớ bitmap cao

Android vitals cung cấp các chỉ số về mức sử dụng bộ nhớ bitmap của ứng dụng bằng cách tổng hợp dữ liệu từ các thiết bị Android. Theo mặc định, các chỉ số này được tính dưới dạng bản tóm tắt dữ liệu hằng ngày trong 28 ngày. Dữ liệu này giúp xác định các xu hướng và khả năng giảm hiệu suất bộ nhớ trên nhiều loại thiết bị và phiên bản.

Android vitals chia sẻ mức sử dụng bộ nhớ bitmap của ứng dụng theo trạng thái quy trình sau đây:

  • Nền trước: Quy trình của ứng dụng hiển thị. P99 dự kiến sẽ cao hơn đáng kể ở nền trước so với các trạng thái quy trình khác, nhưng nhà phát triển nên điều tra nếu tỷ lệ P99/P50 đáng kể (ví dụ: cao hơn 3,5 lần), vì điều này thường cho thấy tình trạng rò rỉ bộ nhớ bitmap. Bạn có thể xác định điều này bằng cách tìm sự khác biệt giữa mức sử dụng thông thường (P50) và mức sử dụng bất thường (P99); trong khi tình trạng phình to tài sản nói chung làm tăng bộ nhớ một cách đồng đều trên tất cả các phân vị, thì tình trạng rò rỉ bộ nhớ sẽ tăng lên theo thời gian, làm sai lệch đáng kể dữ liệu ở phần cuối (P99). Đảm bảo rằng các hoạt động phân bổ bitmap ở nền trước không duy trì một cách không cần thiết sau khi ứng dụng chuyển sang các trạng thái khác.
  • Dịch vụ mà người dùng nhận thấy: Quy trình của ứng dụng đang chạy ở trạng thái có thể nhận thấy. Trong đó có dịch vụ trên nền trước, các tác vụ được tăng tốc và các tác vụ chuyển dữ liệu do người dùng yêu cầu. Ứng dụng không được giữ lại các hoạt động phân bổ bitmap nền trước có kích thước lớn khi chuyển sang các trạng thái này. Vì các dịch vụ này được thiết kế cho các tác vụ chạy trong thời gian dài, nên việc giữ lại các thành phần lớn sẽ làm giảm trải nghiệm tổng thể của người dùng và buộc Low Memory Killer Daemon (LMKD) thu hồi bộ nhớ bằng cách chấm dứt các quy trình có mức độ ưu tiên thấp hơn.
  • Nền: Ứng dụng đang chạy một dịch vụ nền hoặc gần đây đã chuyển sang nền nhưng chưa được lưu vào bộ nhớ đệm. Vì trạng thái quy trình này ít quan trọng hơn các quy trình ở nền trước hoặc có thể nhận thấy, nên các ứng dụng phải giải phóng rõ ràng các thành phần bitmap lớn tại đây để giảm áp lực về bộ nhớ.
  • Đã lưu vào bộ nhớ đệm: Ứng dụng đang ở trạng thái lưu vào bộ nhớ đệm. Trạng thái này rất nhạy cảm với áp lực bộ nhớ hệ thống, chẳng hạn như LMK. Ứng dụng phải chủ động giảm mức sử dụng bộ nhớ bitmap ở trạng thái này để tránh bị hệ điều hành loại bỏ.

Các yếu tố góp phần làm tăng mức sử dụng bộ nhớ bitmap

Bộ nhớ ảo chưa từng được sử dụng cũng có thể được đưa vào tính toán. Nếu bạn thấy mức sử dụng bộ nhớ bitmap cao bất thường, hãy xác minh rằng bạn không phân bổ bộ nhớ không dùng đến.