2014-10-07 2 views
1

У меня возникла такая ситуация, которую я хотел обсудить:ScrollView vs ListView Performance

У меня есть список, целью которого является показать 25 магазинов. Для дизайна Я хочу:

2 макеты, первый имеет: 1 большое фото магазина (скачано из базы данных). 1 значок, если магазин принадлежит к лучшему номинальному списку магазинов (иконка на моем приложении) 1 TextView (скачано строка)

вторые имеют:. 3 TextViews (скачано строка)

Everytextview имеет пользовательский шрифт.

Как вы можете себе представить, это огромная задача для каждого элемента.

Мой главный вопрос:

Я не хотел бы получить гораздо более высокую производительность, если я скачал все, и вместо того, чтобы сделать ListView я заселить Scrollview с этими данными?

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

+0

Первое, что вы могли бы попробовать, прежде чем решить, нужен ли вам ListView vs ScrollView, - это отображать только растровое изображение в нужное вам разрешение (размер экрана, отображаемого на экране). – ataulm

+1

как вы измеряете производительность? Это время, в течение которого пользователь должен ждать, прежде чем они смогут видеть данные на экране? Или это только количество лаги (количественно FPS) при прокрутке содержимого? Или какая-то комбинация этих и других вещей? – ataulm

+0

Когда я говорил, производительность была больше похожа, если прокрутка более гладкая. – pihh

ответ

5

Вы можете сделать то же самое с ListView (скачайте все и покажите), но я не думаю, что «загрузка всего» на самом деле принесет какие-либо улучшения производительности (за исключением того, что вы говорите о кеше).

ScrollView приведет к ухудшению производительности памяти, поскольку вам придется создавать и сохранять сразу 25 просмотров. Напротив, ListView повторно используют одни и те же представления при прокрутке, что приведет к созданию примерно столько же просмотров, сколько может помещаться на экране.

С ScrollView, если изменения набора данных, вам необходимо как-то перенастроить ваши 25 просмотров. В худшем случае воссоздают все взгляды.

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

+0

лучший ответ когда-либо! Я доволен! Спасибо – pihh

1

Из моего опыта, если количество элементов в списке меньше 50, а макет не использует слишком много памяти, тогда вам может быть лучше использовать scrollview.

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

Но опять же, зачем нужен Listview, если набор данных достаточно мал, что не влияет на использование памяти? ListView сложно использовать в сочетании с причудливой анимацией из-за базовой фанки оптимизации, сделанной Google.

+0

Потому что: 1. Вам нужно иметь дело с 25 элементами из набора данных в памяти (включая изображения), 2. Вам нужно иметь дело с 25 иерархиями представлений (которые не настолько малы по размеру, как вы могли бы подумать). 3. Вам нужно воссоздать все это, как только набор данных изменится. Производительность прокрутки примерно такая же, но сделать анимацию сложнее - я согласен. Надеюсь, что 'RecyclerView' решит его. –

+0

Как я уже говорил, «если количество элементов в списке меньше 50, а макет не использует TOO MUCH MEMORY», это критерии, чтобы лучше использовать scrollview. В то время как я склоняюсь к ListView и для большинства случаев, но это действительно зависит от каждого случая. Поэтому я объяснил причины использования. И у scrollview есть свои преимущества. – uDevel

+0

Непонятные критерии, правда? Что слишком много памяти? К каким устройствам это относится? – ataulm

0

То, что я узнал из аналогичной проблемы, состоит в том, что scrollview является более плавным, чем listview. Мое дело состояло в том, чтобы выбрать один для навигационного ящика, потому что плавная инфляция и прокрутка в ящике напрямую влияют на работу пользователя. Я сначала принял список, но это ни в коем случае не было гладким. Затем я обнаружил, что нашел here, что разработчики google используют scrolview вместо listview для ящика, который также работает для меня. Но если ленивая загрузка элементов списка - это то, что вам нужно (не в моем случае), тогда вы должны перейти в listview.