Как Android отображает список из 200 элементов? - PullRequest
2 голосов
/ 27 июня 2010

Когда у меня есть ListActivity и адаптер, как Android обрабатывает список из 200 элементов.Пытается ли он загрузить все их напрямую, как он ожидает, пока пользователь прокрутит, а затем отобразит эти элементы?

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

Ответы [ 3 ]

1 голос
/ 28 июня 2010

Этот вопрос состоит из нескольких частей. Прежде всего, сами данные. Это приходит из базы данных SQLite через запрос? Если это так, у вас есть объект Cursor, который содержит весь результат. Поэтому, если у вас есть запрос, который дает 200 строк, у вас в памяти будут все 200 строк (поэтому так важно сузить проекцию).

Что касается самого списка, то эта часть довольно эффективна - Android будет создавать представления только для тех элементов, которые вы действительно можете видеть. И, в зависимости от того, какие у вас есть виды и поддерживают ли они переработку, Android будет фактически перерабатывать существующие объекты, чтобы минимизировать объем накладных расходов при инициализации и управлении памятью.

1 голос
/ 27 июня 2010

Зависит от того, как реализованы адаптеры.

Если у вас есть адаптер, который не имеет подклассов (вы используете адаптер, поставляемый SDK), Android попытается загрузить их все напрямую.

Я рекомендую создать подкласс SimpleCursorAdapter и реализовать свой собственный адаптер. Таким образом, у вас будет, например, 10 представлений (столько, сколько нужно вашему экрану), и представление будет повторно использовано для остальных 190 записей.

0 голосов
/ 28 июня 2010

Я не уверен, как Android обрабатывает это внутренне.Но большинство программ, которые я видел, решают проблему, загружая около 20 элементов, а затем заставляют последний элемент сказать «Загрузить следующие 20 элементов».Затем, когда вы нажимаете на нее, он загружает следующие 20 элементов.

...