2013-10-09 2 views
1

Я пытаюсь создать наиболее эффективный способ кэширования изображений, загруженных из Интернета для моего приложения, несколько лет назад я пытался это сделать и не мог найти эффективный способ сделать это работа, пока я не наткнулся на lazylist адаптера здесь:Лучший способ кэширования изображений

Lazy load of images in ListView

это работало хорошо до Android 4.0 не был введен, в данный момент приложение будет врезаться после загрузки 10 до 20 изображений, а не раньше, где я мог бы просто загружайте столько, сколько я хотел, без каких-либо проблем, об этом я позже узнал, был результатом сэндвича с мороженым, имеющего установленное ограничение на использование памяти для каждого приложения, которого не было в Gingerbread 2.3, и Низкий, я в конце концов решил просто очистить кеш каждые 10 или около того изображений, чтобы избежать сбоев, однако пользовательский интерфейс был не очень хорошим в результате этого, и приложение использовало тонны данных, поскольку оно постоянно пересматривало изображения снова и снова опять же, которые уже были просмотрены, с тех пор я попытался использовать кэш lru, но это, похоже, не работает вообще, особенно когда я покидаю приложение и перезапускаю его, все изображения выпущены, мне кажется, мне нужен лучший способ сделать это и я заметил, что другие приложения, такие как instagram, похоже, нашли способ кэшировать сотни мегабайт изображений, мне постоянно приходится вручную очищать кэш instagram в моих настройках, потому что кажется, что они могут хранить кеш бесконечного размера что, казалось бы, никогда не выбрасывает его содержимое, кто-нибудь знает, как построить такой вид кеша?

+0

«Об этом я позже узнал из-за сэндвича с мороженым, имеющего установленное ограничение на использование памяти для каждого приложения, которого не было в Gingerbread 2.3 и ниже» - да. – CommonsWare

+0

Если это так, почему я вдруг не смог сохранить много изображений в этом кеше, когда мой телефон обновлен до 40 из 2.3? –

+0

У меня нет возможности узнать. По-видимому, вы тоже этого не делаете, поскольку вы, похоже, не беспокоили использование DDMS и MAT, чтобы определить источник проблем с памятью. Однако ваши претензии относительно использования памяти просто неверны. Android имеет ограничения размера кучи с Android 1.0. Они увеличиваются с первоначального предела в 16 МБ, основанного на разрешении экрана и версии ОС. – CommonsWare

ответ

1

Вы можете попробовать https://github.com/nostra13/Android-Universal-Image-Loader библиотека. Это делает большую часть работы для вас.

+0

Ничего себе эта библиотека выглядит потрясающе, я постараюсь использовать это завтра, когда я получу какое-то время, если она будет работать так же хорошо, как я думаю, попробуйте пожертвовать деньги разработчику, который его написал! –

1

Способ, которым я предлагал wold, состоял в том, чтобы хранить изображения из Интернета на SD-карте или что-то, а затем хранить URI, где находится маг. В вашем списке просто загрузите изображение из uri.

Если ваши изображения большого размера, вы должны, вероятно, rezise изображение, прежде чем сохранить его, чтобы использовать меньше памяти, и она будет загружаться быстрее, так как обработка уже сделано

BTW предел памяти всегда существовал в android

+0

Я попытаюсь сделать это таким образом, но я не знаю, что еще может объяснить, почему мое приложение начало сбой при изменении ОС, в 2.3 я загрузил очень большие изображения, и он никогда не вызывает проблем, в 4.0 я начал получать OutOfMemoryError без остановки –

+0

вы, вероятно, получаете ошибку, потому что вы не масштабировали свои изображения должным образом – tyczj

+0

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

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