До сих пор я использую SoftReference Кэш для изображений в Android. Этот кэш используется для изображений, которые отображаются в ListViews, и должен помочь удерживать изображения элементов в памяти, которые не отображаются на экране, если осталось достаточно памяти.
Проблема с этим заключается в том, что SoftReferences собирают мусор почти в тот самый момент, когда выпускается последняя жесткая ссылка. Результатом этого является то, что изображение, которое удаляется с экрана, в этот момент собирается мусором, и если пользователь прокручивает обратно к этой записи в ListView, изображение перезагружается из внутренней памяти телефона, что приводит к сложному отложенному процессу загрузки, что приводит к в частых перерисовках списка и вообще плохой производительности.
В запросе об ошибке для мягкого эталонного поведения говорится, что это предполагаемое поведение, и что вы должны использовать LRU-Cache для кэширования такого рода вещей.
Знай на мой вопрос. Кэш LRU займет столько памяти, сколько я позволю ему. Но если приложению нужно много памяти, оно не освободит память. Как определить, сколько памяти я могу использовать для кэша, и есть ли способ уменьшить размер кэша, если ситуация с памятью телефона становится напряженной?
На данный момент кэш изображений сохраняется внутри приложения как своего рода глобальное хранилище изображений для всех видов деятельности. Это приведет к тому, что мое приложение будет постоянно использовать всю память кеша изображений, даже если мои действия будут в фоновом режиме или уничтожены.