86 / 86 / 13
Регистрация: 03.03.2011
Сообщений: 1,873
|
|||||||||||
1 | |||||||||||
Загрузка и отображение большого количества картинок с памяти телефона10.04.2014, 15:37. Показов 3416. Ответов 17
Метки нет (Все метки)
Если изображения больше 10, то начинаются заметные тормоза, если больше 100, то программа падает с ошибкой памяти
у меня есть массив, содержащий абсолютные пути к нужным картинкам по ним я вытаскиваю thumbnails и загружаю в imageView каждая imageView обернута в разметки обернута так(т.е. из кода создается такая размекта)
подскажите, что вызывает такую задержку, обращения к памяти, или создание кучи разметок? и как оптимизировать?
0
|
10.04.2014, 15:37 | |
Ответы с готовыми решениями:
17
При загрузке большого количества картинок библиотекой Picasso заканчивается память Загрузка большого количества картинок на форму Загрузка большого количества картинок в ListBox Сохранение в файл большого количества картинок и данных через STREAM |
63 / 63 / 8
Регистрация: 17.05.2013
Сообщений: 286
|
|
10.04.2014, 16:25 | 2 |
Задержку вызывает то, что у вас все картинки хранятся в оперативной памяти. И при большом количестве картинок ее просто не хватает и программа выдает OutOfMemoryException. Чтоб этого избежать вам нужно использовать ссылки SoftReference или WeakReference, что бы программа знала, что при необходимости эти объекты можно удалить при помощи сборщика мусора.
1
|
86 / 86 / 13
Регистрация: 03.03.2011
Сообщений: 1,873
|
|
10.04.2014, 19:30 [ТС] | 4 |
шаг 1- формируем массив из Reference<Bitmap>, вытаскивая в цикле картинки из памяти шаг 2- опять же в цикле выводим картинки из массива, сформированного выше, на экран так?
0
|
63 / 63 / 8
Регистрация: 17.05.2013
Сообщений: 286
|
|
10.04.2014, 19:38 | 5 |
Шаг 3 http://nostra13android.blogspo... art-1.html
В реализации просмотра миниатюр очень много подводных камней, рекомендую использовать готовы велосипед. Вот еще почитайте http://developer.android.com/t... index.html
1
|
86 / 86 / 13
Регистрация: 03.03.2011
Сообщений: 1,873
|
||||||
10.04.2014, 22:25 [ТС] | 6 | |||||
не хочу использовать сторонние либы, так что буду пробовать эти 2 шага)
Добавлено через 2 часа 24 минуты запутался я..
адаптор для вывода в gridview
0
|
63 / 63 / 8
Регистрация: 17.05.2013
Сообщений: 286
|
||||||
11.04.2014, 00:08 | 7 | |||||
1
|
86 / 86 / 13
Регистрация: 03.03.2011
Сообщений: 1,873
|
|
11.04.2014, 14:19 [ТС] | 8 |
как узнать какие из вьюх в данный момент отображаются при скролинге? чтоб в них загружать?
Добавлено через 57 секунд и если честно, то не понял смысл soft ссылок ведь всеравно они ссылаются на объект до тех пор, пока этот объект не зачищен а следовательно это объект все так же висит в памяти
0
|
63 / 63 / 8
Регистрация: 17.05.2013
Сообщений: 286
|
|
11.04.2014, 14:36 | 9 |
можно создать класс который будет содержать Bitmap, путь к картинку и какой нибудь идентификатор ImageView. А когда поток загрузит миниатюру искать по пути картинки нужный экземпляр класса и вытаскивать от туда вьюху. Но тут могут при быстром скролинге проблемы начаться.
На сколько я помню Soft удалит объекты только когда будет нехватка памяти, а weak при любом запуске сборщика мусора если конечно этот объект не используется.
0
|
86 / 86 / 13
Регистрация: 03.03.2011
Сообщений: 1,873
|
||||||
11.04.2014, 15:07 [ТС] | 10 | |||||
ссылка ссылается на экземпляр битмапа который всеравно загружается в память ну например
и еще вопрос: повлияет ли на производительность то, что я буду использовать кучу лайотов вместо грида? Добавлено через 5 минут это я к тому что не хочу с имагаАдаптером возиться
0
|
63 / 63 / 8
Регистрация: 17.05.2013
Сообщений: 286
|
|
11.04.2014, 15:07 | 11 |
b удалиться только тогда когда у вас будет OutOfMemory непосредственно перед ним.
Грид попроизводительнее будет.
1
|
86 / 86 / 13
Регистрация: 03.03.2011
Сообщений: 1,873
|
|
11.04.2014, 20:06 [ТС] | 12 |
ну вот он удалится после того как я загружу 30 фотографию
и как быть потом? как то это отлавливать и по новой загружать? и как загружать по новой, если памяти нет уже
0
|
63 / 63 / 8
Регистрация: 17.05.2013
Сообщений: 286
|
|
11.04.2014, 23:52 | 13 |
spydark91, для этого и нужен кэш. Чтоб удалялось не все сразу а часть. То что удалилось грузить потом по новой.
0
|
86 / 86 / 13
Регистрация: 03.03.2011
Сообщений: 1,873
|
|||||||||||
12.04.2014, 00:18 [ТС] | 14 | ||||||||||
а когда нужно грузить вызывается метод getView в гриде, да?
Добавлено через 4 минуты пока что пробую так при объеме до 100 работает довольно таки быстро но при 200 вылетает ошибка и сделано без ссылок, поскольку так и не допер куда их прикрутить..прошу просветить в этом коде сначала создаю адаптер а потом создаю вьюхи асинхроннонно вытаскиваю битмапы
ну и лог
0
|
86 / 86 / 13
Регистрация: 03.03.2011
Сообщений: 1,873
|
||||||||||||||||
13.04.2014, 17:05 [ТС] | 15 | |||||||||||||||
вот так все работает(с большим количеством картинок в том числе), вот только если не прокручивать грид быстро-быстро если прокручивать очень быстро(видимо оно не успевает загружать-удалять), то вываливается с ошибкой
Добавлено через 1 час 12 минут поправил это, написав небольшой кеш мб кому пригодится,выложу код
0
|
13.04.2014, 17:13 | 16 | |||||
spydark91, не заморачивайтесь и используйте готовую библиотеку https://github.com/nostra13/An... age-Loader
И просто вызываете его в адаптере:
0
|
86 / 86 / 13
Регистрация: 03.03.2011
Сообщений: 1,873
|
|
13.04.2014, 17:20 [ТС] | 17 |
да все уже работает)
приятно самому разобраться же надо понимать как такие вещи работают, хотя бы примерно
0
|
13.04.2014, 19:21 | 18 |
spydark91, Кстати на счёт кэша - у андроида уже есть такой LruCache<K, V> http://developer.android.com/r... Cache.html
1
|
13.04.2014, 19:21 | |
13.04.2014, 19:21 | |
Помогаю со студенческими работами здесь
18
Отображение большого количества данных Загрузка большого количества ресурсов Загрузка большого количества текста Загрузка большого количества файлов Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |