Cho đến bây giờ tôi đang sử dụng SoftReference Bộ nhớ cache cho hình ảnh trong Android. Bộ nhớ đệm này được sử dụng cho các hình ảnh được hiển thị trong ListView và sẽ giúp giữ hình ảnh của các mục trong bộ nhớ không được hiển thị trên màn hình, nếu còn đủ bộ nhớ.Làm cách nào để triển khai bộ nhớ cache hình ảnh trong bộ nhớ trong Android?
Vấn đề với điều này là SoftReferences là rác được thu thập gần ngay tại thời điểm tài liệu tham khảo cứng cuối cùng được phát hành. Kết quả của việc này là một hình ảnh được lấy ra khỏi màn hình là rác được thu thập tại thời điểm đó và nếu người dùng cuộn trở lại mục nhập này trong ListView, hình ảnh được tải lại từ bộ nhớ điện thoại nội bộ sẽ dẫn đến quá trình tải phức tạp. thường xuyên vẽ lại danh sách và hiệu suất chung chung.
bug request cho hành vi tham chiếu mềm nêu rõ đây là hành vi dự định và bạn nên sử dụng LRU-Cache để lưu vào bộ nhớ cache loại nội dung này.
Biết câu hỏi của tôi. Bộ nhớ cache LRU sẽ chỉ chiếm nhiều bộ nhớ như tôi cho phép. Nhưng nếu ứng dụng cần nhiều bộ nhớ thì nó sẽ không giải phóng bộ nhớ. Làm thế nào tôi nên xác định có bao nhiêu bộ nhớ tôi có thể cho phép Cache để sử dụng, và có cách nào để giảm kích thước của bộ nhớ cache nếu tình hình bộ nhớ của điện thoại trở nên chặt chẽ?
Hiện tại, bộ nhớ cache hình ảnh được lưu bên trong ứng dụng dưới dạng một loại lưu trữ hình ảnh toàn cầu cho tất cả các hoạt động. Điều này sẽ dẫn đến ứng dụng của tôi liên tục sử dụng tất cả bộ nhớ của bộ nhớ cache hình ảnh ngay cả khi các hoạt động của tôi ở chế độ nền hoặc bị hủy.
cảm ơn bạn vì câu trả lời – Janusz
Tôi không thể thấy cách sử dụng LruCache sẽ khắc phục sự cố lưu trữ hình ảnh hoặc bất kỳ BLOB nào khác cho vấn đề đó. Vấn đề là kích thước cố định của nó, trong đó mỗi mục giữ một tham chiếu mạnh mẽ đến đối tượng được lưu trữ. Điều đó sẽ không mở rộng với bộ nhớ của thiết bị. – Matthias
LruCache đuổi các mục khi kích thước của nó vượt quá giới hạn bạn đã đặt. Bạn có thể ghi đè lên một phương thức để giúp LruCache đo kích thước của mỗi mục nhập. –