Определение размера кэша LRU в соответствии с возможностями устройства и свободной памятью

Я подумываю о реализации первого уровня моего кеширования в приложении для Android. Я рассматривал SoftReferences, чтобы наверняка избежать исключений OOM, но поскольку есть много статей о том, как Android освобождает их «слишком рано», я решил заглянуть в кеш android.util.LruCache.

Вопрос: Как правильно подобрать размер для реального устройства? Все это звучит очень приятно, что реальным решением является кеш LRU, а не SoftReferences, но если вы действительно хотите избежать исключений OOM, вам будет крайне небезопасно использовать любое количество мегабайт жестких ссылок. Это просто небезопасно, если вы спросите меня. Во всяком случае, это, кажется, единственный вариант. Я искал getMemoryClass, чтобы узнать размер кучи приложения на фактическом устройстве (+ проверка свободного размера кучи перед изменением размера кеша). Базовая линия составляет 16 мегабайт, что звучит нормально, но я видел устройства (например, G1 в былые времена), генерирующие исключения OOM всего около 5 мегабайт размера кучи (согласно Eclipse MAT). Я знаю, что G1 очень старый, но дело в том, что мой опыт не совсем соответствует базовому показателю в 16 мегабайт, который упоминается в документации. Поэтому я совершенно не уверен, как мне масштабировать кеш LRU, если мне нужно максимум, что я могу разумно получить. (был бы доволен 8 мегабайтами и пошел бы с 1 мегабайтами на устройстве с низкими характеристиками)

Спасибо за любые подсказки.

Изменить: класс кэша Android LRU, о котором я говорю: http://developer.android.com/reference/android/util/LruCache.html

12
задан user289463 24 February 2012 в 11:53
поделиться