Ghi tệp báo lỗi (Khung hiển thị)

Triển khai Jetpack Compose

Trang này chứa thông tin về cách tìm và kích hoạt rò rỉ bộ nhớ chỉ có trong bố cục dựa trên Khung hiển thị. Để biết thông tin cốt lõi về cách ghi lại và phân tích tệp báo lỗi, hãy xem phần Ghi lại tệp báo lỗi.

Tìm lỗi rò rỉ bộ nhớ

Để nhanh chóng lọc các lớp có thể liên kết với lỗi rò rỉ bộ nhớ, hãy mở trình đơn thả xuống lớp rồi chọn Show activity/fragment leaks (Hiện lỗi rò rỉ hoạt động/phân mảnh). Android Studio cho thấy những lớp mà theo đó, lỗi rò rỉ bộ nhớ có thể xảy ra đối với các thực thể ActivityFragment trong ứng dụng của bạn. Bộ lọc này hiển thị những loại dữ liệu sau đây:

  • Các thực thể Activity đã bị huỷ bỏ nhưng vẫn đang được tham chiếu.
  • Các thực thể Fragment không có FragmentManager hợp lệ nhưng vẫn đang được tham chiếu.

Xin lưu ý rằng bộ lọc có thể mang lại kết quả dương tính giả trong các trường hợp sau:

  • Fragment được tạo nhưng chưa được sử dụng.
  • Fragment đang được lưu vào bộ nhớ đệm nhưng không thuộc FragmentTransaction.

Để tìm rò rỉ bộ nhớ theo cách thủ công hơn, hãy duyệt xem danh sách lớp và phiên bản để tìm các đối tượng có Retained Size (Kích thước giữ lại) lớn. Tìm lỗi rò rỉ bộ nhớ do bất kỳ nguyên nhân nào sau đây:

  • Các lượt tham chiếu kéo dài đến Activity, Context, View, Drawable và các đối tượng khác có thể duy trì tham chiếu đến vùng chứa Activity hoặc Context.
  • Các lớp không tĩnh bên trong (chẳng hạn như Runnable) có thể duy trì một thực thể Activity.
  • Bộ nhớ đệm duy trì các đối tượng lâu hơn mức cần thiết.

Khi bạn phát hiện thấy các trường hợp có thể gây rò rỉ bộ nhớ, hãy sử dụng thẻ Fields (Trường) và References (Giá trị tham chiếu) trong Instance Details (Thông tin chi tiết về phiên bản) để chuyển đến phiên bản hoặc dòng mã nguồn mà bạn quan tâm.

Kích hoạt rò rỉ bộ nhớ để kiểm thử

Để kích hoạt sự cố rò rỉ bộ nhớ nhằm kiểm thử trong ứng dụng, bạn có thể kích hoạt sự cố rò rỉ theo một trong các cách sau:

  • Liên tục xoay thiết bị từ chế độ dọc sang chế độ ngang rồi ngược lại trong khi ở nhiều trạng thái hoạt động. Việc xoay thiết bị thường có thể khiến ứng dụng rò rỉ đối tượng Activity, Context hoặc View vì hệ thống tạo lại Activity và nếu ứng dụng của bạn tham chiếu đến một trong những đối tượng đó ở nơi khác, thì hệ thống không thu thập được rác của đối tượng đó.
  • Chuyển đổi giữa ứng dụng của bạn và một ứng dụng khác khi ở nhiều trạng thái hoạt động. Ví dụ: chuyển đến màn hình chính, sau đó quay lại ứng dụng của bạn.