Как реализовать кэш изображений в памяти в Android?

До сих пор я использую SoftReference Кэш для изображений в Android. Этот кеш используется для изображений, которые отображаются в ListViews, и должен помогать удерживать в памяти изображения элементов, которые не отображаются на экране, если памяти достаточно.

Проблема в том, что SoftReferences собирают мусор почти в тот самый момент, когда освобождается последняя жесткая ссылка. Результатом этого является то, что изображение, которое удаляется с экрана, в этот момент собирается сборщиком мусора, и если пользователь прокручивает назад эту запись в ListView, изображение перезагружается из внутренней памяти телефона, что приводит к сложному процессу отложенной загрузки, в результате чего в частых перерисовках списка и в целом плохой работе.

В запросе об ошибке для поведения мягкой ссылки указано, что это предполагаемое поведение и что вы должны использовать LRU-Cache для кэширования такого рода материалов.

Знаю на мой вопрос. Кэш LRU займет ровно столько памяти, сколько я ему позволю. Но если приложению требуется много памяти, оно не освободит память. Как мне определить, какой объем памяти я могу позволить использовать кеш-памятью, и есть ли способ уменьшить размер кеш-памяти, если ситуация с памятью телефона становится жесткой?

На данный момент кэш изображений сохраняется внутри приложения как своего рода глобальное хранилище изображений для всех действий. Это приведет к тому, что мое приложение будет постоянно использовать всю память кеша изображений, даже если мои действия выполняются в фоновом режиме или уничтожаются.

12
задан Janusz 20 January 2012 в 16:04
поделиться