Android 애플리케이션의 캐싱 메커니즘을 구현하는 중입니다.SoftReference가 가비지 수집을 너무 일찍 시작합니다.
내가 찾은 많은 사례처럼 SoftReference
을 사용합니다. 문제는 내 ListView
에서 위 또는 아래로 스크롤 할 때 이미지가 인 경우 이 이미 삭제 된 것입니다. LogCat에서 응용 프로그램이 새 이미지를로드 할 때마다 내 응용 프로그램이 가비지 수집됨을 알 수 있습니다. 이는 ListView
에있는 보이지 않는 이미지 중 이 대부분이 사라짐을 의미합니다.
그래서, 나는 다시 한 번 이미지를 다운로드해야합니다 (전에 정말 이미지를 다운로드) 이전 위치로 매번 내가 스크롤 다시 - 그들은 있어는를 캐시되지 않습니다.
이 주제를 연구했습니다. According to Mark Murphy in this article, SoftReference
버그가있는 것 같습니다 (또는 있었습니까?). 다른 결과는 같은 것을 나타냅니다 (또는 같은 결과). SoftReference
가 너무 일찍 삭제됩니다.
작동하는 해결책이 있습니까?
** 너무 일찍 **? 메모리가 필요하면 지워집니다. 누가 너무 일찍 말 할까? 시스템이 그것을 지우고 싶다면, 이것은 softreference가 무엇인지에 대한 것입니다. – binnyb
정확함. 하지만 메모리에 50 개의 이미지를 쉽게 저장할 수 있기 때문에 더 많은 메모리가 필요하지 않습니다. 하지만 OOM 오류를 피하기 위해이 캐싱 메커니즘을 사용해야합니다. – Wroclai
캐시에서 각 이미지를 캐시하는 것이 좋습니다. 캐시에서 데이터를 가져올 필요가 없습니다 (캐시에없는 경우 제외). – binnyb