2012-06-21 4 views
0

Есть ли формула, которую я мог бы использовать для вычисления размера LruCache? Мог ли я основывать его на статистике памяти VM, предлагаемой Runtime.getRuntime().Вычисление оптимального размера LruCache

Я хранил файлы растровых изображений - данные файла, а не распакованный битмап.

ответ

1

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

Есть несколько доступных реализаций Java для кешей, основанных на мягких ссылках, таких как Googles MapMaker, но я не уверен, какой объем этих библиотек приносит с собой, и если вы, возможно, лучше подходят для самостоятельной реализации на Android.

+0

Android не поддерживает 'SoftReference', дизайн. VM необходимо активно освобождать память. «LruCache» - правильное решение. Он должен иметь размер, указанный заранее. https://code.google.com/p/android/issues/detail?id=20015 – mparaz

+3

Хорошо, прочитав эту дискуссию, я не знаю, что сказать. Почему эти люди копируют классы Java, когда они внезапно меняют важные аспекты поведения ... – Bananeweizen

4

Вот отрывок из Caching Bitmaps руководства:

// Get memory class of this device, exceeding this amount will throw an 
// OutOfMemory exception. 
final int memClass = ((ActivityManager) context.getSystemService(
     Context.ACTIVITY_SERVICE)).getMemoryClass(); 

// Use 1/8th of the available memory for this memory cache. 
final int cacheSize = 1024 * 1024 * memClass/8; 
+0

Спасибо. Фактически, в предыдущем абзаце у них есть гораздо больше рекомендаций, но нет конкретного ответа. – mparaz

+1

Код примера ссылки был обновлен тем, как он получает доступную память и устанавливает cacheSize. Теперь он использует 'final int maxMemory = (int) (Runtime.getRuntime(). MaxMemory()/1024);' и затем выполняет 'final int cacheSize = maxMemory/8;' –

Смежные вопросы