2

В моем приложении есть активность, чей показ вокруг 1000 очень маленьких растровых изображений (около 20kb каждого растрового изображения). После загрузки некоторых растровых изображений есть OutOfMemoryException.Использование LruCache и исключение OutOfMemoryException

Я был в начале чтения около SoftReference, и это похоже, что оно решит мою проблему о OOM exceptions. Но потом я читал, что он не будет кэшировать мои растровые изображения и освободит их «слишком рано», поэтому ему придется снова декодировать растровое изображение и «тратить время». Итак, я внедрил LruCache.

Как я могу убедиться, что я не получу OOM exception при реализации моего LruCache?

Может быть, я должен просто использовать SoftReference, потому что моя главная цель, чтобы избежать OOM

Или это может быть мое решение? LruSoftCache

ответ

2

При реализации LruCache вы должны указать размер кеша и рассказать ему, как рассчитать размер для каждого объекта (в этом случае объект является растровым).

Вы можете использовать следующий образец:

// uses 1/8th of the memory for the cache 
final int cacheSize = (int) (Runtime.getRuntime().maxMemory()/8L); 
LruCache bitmapCache = new LruCache(cacheSize) { 
    protected int sizeOf(String key, Bitmap value) { 
     return value.getByteCount(); 
}} 
+0

Что произойдет, если он превышает указанную память? освобождает ли он другие выделенные растровые изображения, чтобы избежать исключения памяти? – idish

+0

Да, наименее недавнее используемое растровое изображение будет удалено из кеша и будет собираться мусором, если на него не ссылаются другие объекты. – xizzhu

+0

«будет сбор мусора» означает, что он будет переработан? bitmap.recycle() – idish

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

  • Нет связанных вопросов^_^