Tôi muốn sử dụng WeakReference
s như một phần của bộ nhớ cache bitmap (android) để có thể kiểm tra khi bitmap không được sử dụng nữa.Khi nào WeakReference # get() bắt đầu trả về null?
Bộ nhớ cache của tôi có kích thước tối đa nhỏ hơn không gian heap Java. Khi một bitmap mới sẽ tràn bộ nhớ cache, nó sẽ cho phép các bitmap không cần nữa.
Câu hỏi của tôi: Khi nào phương thức get() của một WeakReference
trả về null?
- Ngay sau khi không có tham chiếu mạnh mẽ hơn cho đối tượng? (và GC chưa xảy ra)
- Hoặc khi GC đã chạy và xác định rằng chúng không có tham chiếu mạnh mẽ hơn đối với đối tượng?
Nếu 2. đúng hơn là tôi có thể gặp tình huống mà bộ nhớ cache của tôi có thể lấp đầy và GC gần đây không chạy vì lý do nào đó.
Sau đó, ngay cả khi tôi đã từ bỏ tham chiếu SAU lần chạy GC cuối cùng, WeakReference#get()
vẫn sẽ trả lại đối tượng và bộ nhớ cache của tôi sẽ không xóa nó.
Tham chiếu mềm được dành cho bộ nhớ đệm. Hành vi của họ trên Android là gì? –
Giống nhau, chúng được giải phóng ngay khi không có tham chiếu mạnh mẽ nào tồn tại. Mà sau chữ cái của tiêu chuẩn Java, nếu không phải là tinh thần. –
Thay đổi ở cấp API 9. Tài liệu liên quan: http://developer.android.com/training/displaying-bitmaps/cache-bitmap.html#memory-cache – Delyan