Подтвердить что ты не робот

Как реализовать кеш памяти в Android?

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

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

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

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

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

4b9b3361

Ответ 1

Сохранение фоновых процессов - оптимизация на уровне ОС, которая ускоряет переход на ваш процесс. Ваш процесс останется в живых только до тех пор, пока ОС может позволить себе память; когда эта память нужна для другого приложения, ваш процесс будет убит и его ресурсы будут освобождены.

Если вы освобождаете свой кеш при каждом обращении к вашему процессу, переключение обратно в ваше приложение перестает быть быстрым, потому что оно будет видеть промахи в кэше. Это побеждает оптимизацию Android keep-background-processes-alive!

Вы должны просто использовать LruCache, который также включен в Пакет поддержки Android для выпусков до Android 3.0 (Honeycomb).