2013-06-25 2 views
4

Я ищу способ хранения некоторых растровых изображений, к которым можно получить доступ несколькими действиями, без необходимости перезагрузки из Интернета.Хранение растровых изображений для нескольких видов деятельности?

Я не хочу просто передавать их с Activity на Activity, помещая их в Intent, но у меня есть одно место, где я могу получить к ним доступ, не передавая их.

Я искал кэширование, чтобы помочь решить эту проблему, но если это решение, я немного не понимаю, как сделать кеш доступным в нескольких действиях.

Любые предложения или альтернативные решения были бы весьма признательны.

+0

Сообщите нам то, что вы пробовали до сих пор. – Dulanga

+0

Это очень сложная задача, и для новичков лучший подход - это просто использовать библиотеку типа @ yakiv.mospan, предложенную как Пикассо. edit: быть честным даже для новичков, зачем писать все это снова, если есть такие хорошие открытые источники свободно доступных библиотек? – Budius

+0

@Budius Мое колебание с использованием Picasso заключается в том, что мне придется повторно загружать изображение каждый раз, когда мне это нужно, в другом действии. – ahaisting

ответ

2

Вы можете использовать LruCache, такую ​​библиотеку, как Volley, или реализовать ту же функциональность самостоятельно. Я думаю, что библиотека залпов была бы идеальна для вас.

Чтобы получить доступ к нему из любой точки приложения, вы должны либо сохранить его в специальном объекте приложения, либо в статической переменной. Обратите внимание, что там будет храниться только ссылка на кеш. Размер кеша в обоих случаях, перечисленных выше, настраивается.

+0

ablut LruCache, следует отметить, что даже если он не поддерживается на старых устройствах, довольно легко скопировать код и заставить его работать с более старыми API-интерфейсами ... –

0

Что означает the cache accesible in multiple activities? Просто загрузите его из Интернета, сохраните на SD-карту (chache it), а затем загрузите его с SD-карты из любого количества действий, сколько хотите.

Here - это пример того, как вы можете хранить данные на Android.

Вы можете использовать загрузчик Picasso для выполнения этой задачи.

+0

Да, конечно. Библиотека Picasso получает имя растрового изображения, относящееся к URL-адресу, которое вы ему дали. Если бы ответ был прав, пожалуйста, примите его. Thank's –

+0

Вы также можете бросить эти уроки developer.android.com/training/displaying-bitmaps/index.html. Тэй поможет вам много. –

+0

Благодарим вас за решение! Меня немного беспокоят две вещи. Первое - время, необходимое для загрузки данных с SD-карты. Я надеюсь найти решение, которое позволяет загружать и визуализировать изображения быстро. Вторая проблема - пространство, которое эти Картинки будут занимать на SD-карте. Будут ли файлы постоянными? или, скорее, временно, пока не потребуется больше памяти. – ahaisting

-1

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

+0

И будьте готовы получить OutOfMemmory. Это нехорошее решение. –

+0

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

+0

Отсюда http: // разработчик .android.com/training/display-bitmaps/index.html: Растровые изображения занимают много памяти, особенно для богатых изображений, таких как фотографии. Например, камера на Galaxy Nexus принимает фотографии размером до 2592x1936 пикселей (5 мегапикселей). Если используется битмап-конфигурация ARGB_8888 (по умолчанию от Android 2.3), то загрузка этого изображения в память занимает около 19 МБ памяти (2592 * 1936 * 4 байта), что сразу же исчерпало ограничение для каждого приложения на некоторых устройствах. –