В моем приложении у меня есть другой вид списка, содержащий несколько эскизов. Сегодня я начинаю рефакторинг, и я хочу реализовать кэширование LRU. Я следую линиям Android, но мне интересно, стоит ли инициализировать только один LRU Cache для всего приложения или лучше инициализировать кеш LRU для каждого вида списка. Я боюсь outOfMemory. Таким образом, у меня есть следующие вопросы, на которые я не могу ответить сам: - один LRU-кеш, инициализированный одноэлементным рисунком, является хорошей идеей? - если память низкая, приводит ли ситуация outOfMemory к следующей инициализации LRU Cache?LRU Cache: инициализировать только один для всего приложения?
@Override
protected void onCreate(Bundle savedInstanceState) {
...
// Get max available VM memory, exceeding this amount will throw an
// OutOfMemory exception. Stored in kilobytes as LruCache takes an
// int in its constructor.
final int maxMemory = (int) (Runtime.getRuntime().maxMemory()/1024);
// Use 1/8th of the available memory for this memory cache.
final int cacheSize = maxMemory/8;
mMemoryCache = new LruCache<String, Bitmap>(cacheSize) {
@Override
protected int sizeOf(String key, Bitmap bitmap) {
// The cache size will be measured in kilobytes rather than
// number of items.
return bitmap.getByteCount()/1024;
}
};
...
}
если память мала, кэш LRU автоматически освобождается? Мне интересно, будет ли у приложения проблемы с выпуском памяти, когда я использую LRU Cache (из-за сбоя приложения из-за нехватки памяти?)
Только один LRU-кеш для всего приложения, может быть проблемой?
- Более одного кэша LRU для всего приложения, может быть, проблема?
Привет! В это время я инициализирую weakHashMap в конструкторе listview, и я помещаю миниатюры на эту карту. Я думал, что лучше использовать LRU-кеш, но после прочтения вашего ответа я немного напуган. – aeroxr1
Я просто посмотрел на «WeakHashMap». Я не понимал, что это * ключи *, которые имеют слабую ссылку в этом классе, а не значения. По этой причине, я думаю, вы можете сделать такую карту как «Map>». Я сейчас желаю, чтобы я сделал это для начала. Поскольку класс 'LruCache' не имеет никаких скрытых связей с GC, он почти бесполезен. Таким образом, вы можете быть на правильном пути. Просто проверьте дерьмо из этого, и если он ведет себя приемлемо, объявите победу и назовите это днем. –
В слабой хэш-карте это ключ, который имеет слабую ссылку ??? действительно ? Я этого не знал !!! – aeroxr1