Tôi có một Fragment
có một số RecyclerView
.Bộ nhớ không giải phóng sau khi phân đoạn bị xóa
Trong RecyclerView
này, tôi thỉnh thoảng có thể tải về và hiển thị hình ảnh (nạp với Glide vào ImageView
.
Vì vậy, khi tôi mở Fragment
, sử dụng bộ nhớ có thể đôi khi nhảy từ khắp nơi trên 30MB lên khoảng 100MB hoặc thậm chí nhiều hơn nữa.
Sau Activity
được giữ Fragment
xong, bộ nhớ không giải phóng. Nó vẫn giống như trước.
tôi đã kiểm tra Glide tài liệu hướng dẫn và rõ ràng chúng tôi không phải lo lắng về việc giải phóng Bitmaps
trong RecyclerView
. Đây là một vấn đề lớn, bởi vì ứng dụng thường xuyên bị treo do OOM vì điều này.
Tôi nên xử lý chính xác việc giải phóng bộ nhớ khi nào Fragment
bị xóa?
Edit: quan sát khác
Một điều tôi nhận thấy là nếu tôi hoàn thành Activity
và sau đó bắt đầu cùng Activity
một lần nữa. Bộ nhớ sẽ nhảy xuống một lúc và sau đó sao lưu tối đa 100MB, điều này khiến tôi tin rằng bộ nhớ bị xóa trước khi khởi chạy lại Fragment
.
Cảm ơn, điều này chắc chắn sẽ giúp ích. Tôi sẽ cung cấp cho một thử ngày mai (mặc dù nó có thể mất một lúc trước khi tôi làm điều này trong suốt ứng dụng) và tôi sẽ cho bạn biết làm thế nào nó đi. – Guy
Khi bạn nói để xóa tất cả các biến, điều đó có nghĩa là các biến mẫu, phải không? Nếu tôi tạo một biến trong phương thức onCreate, tôi có nên xóa một biến sau khi tôi ngừng sử dụng nó không? – Guy
Có. Tất cả mọi thứ mà bạn phân bổ phải/nên được xử lý ngay sau khi bạn biết bạn sẽ không cần nó nữa. Như một phép ẩn dụ: 1) Bạn mua một tờ giấy dùng một lần. Bạn viết trên mảnh giấy đó một vài sự kiện về ngày của bạn 2) Bạn sẽ sử dụng mảnh giấy đó cho cả ngày nhưng bạn biết bạn sẽ không cần giấy mãi mãi 3) Đến cuối ngày, bạn nhận ra giấy bây giờ đã hoàn thành mục đích của nó. 4) Bạn loại bỏ giấy bằng cách xé nó ra và ném nó vào thùng rác. Bây giờ, hãy hiểu "mẩu giấy" như bất kỳ biến nào bạn sử dụng và "ngày" của bạn làm vòng đời hoạt động của bạn. –