Как нативные приложения для Android 4.0 имеют очень быструю прокрутку ListViews? - PullRequest
3 голосов
/ 09 января 2012

Я сравниваю производительность, в частности скорости прокрутки ListView, приложений, которые я создаю, с собственными приложениями Android 4.0 - Gmail, Gtalk и т. Д.

Одна вещь, которую я заметил, заключается в том, что частота прокрутки ListView в нативных приложениях Android очень высока - почти 60 кадров в секунду. В моих приложениях ListView прокручивается не так быстро.

Предполагая, что я неправильно использую ListView (а я нет - я следовал всему, что здесь указано: http://www.youtube.com/watch?v=wDBM6wVEO70), Я решил создать пустышку ListView, которая просто возвращает дюжину почти пустых LinearLayout просматривает в виде строк (да, я правильно использую convertView). Что беспокоит, так это то, что мой почти пустой ListView имеет более низкую производительность прокрутки, чем любое из родных приложений - Gmail, Gtalk, Контакты и т. Д.

Как примечание: простой ScrollView обладает действительно хорошей производительностью прокрутки, но не рекомендуется использовать ScrollView для больших списков.

Очевидно, что нативные приложения делают что-то (или имеют доступ к чему-то), чего я не понимаю. К сожалению, эти нативные приложения не имеют открытого источника. Кто-нибудь знает, как эти нативные приложения достигают такой потрясающей производительности?

Ответы [ 3 ]

1 голос
/ 23 марта 2013

После просмотра исходного кода для родного почтового приложения я обнаружил, что элементы списка в списке сообщений являются отдельными представлениями, а не группами просмотра, такими как LinearLayout.Это обеспечивает очень плоскую иерархию просмотра, которая приводит к лучшей частоте кадров при прокрутке списка.Мне кажется, я помню, как смотрел видео выступления Ромена Гая (одного из ведущих инженеров пользовательского интерфейса Android), в котором упоминалось, что команда Gmail сделала нечто подобное для повышения производительности.Чтобы достичь этого самостоятельно, вам нужно создать подкласс View и нарисовать все в View самостоятельно в методе onDraw ().

Здесь - источник элемента списка сообщений в текущемприложение электронной почты.

Они делают крутой трюк, когда вы раздуваете представление (но не присоединяете его), получаете координаты того, куда идут элементы, основываясь на ViewGroup, в котором оно находится, и кэшируете координаты вКарта, поэтому, когда представление перерабатывается в список, вам не нужно снова его раздувать.Я мог бы попробовать это в моем будущем проекте!

Надеюсь, это поможет!

0 голосов
/ 09 января 2012

Я также следил за этим видео, чтобы создать мой список.В моем приложении не так много элементов (строк).Но я думаю, что если мы просто сделаем, как сказано в видео, мы на правильном пути, по крайней мере, в теории?

0 голосов
/ 09 января 2012

Существуют некоторые методы для ускорения ListView: кэширование и использование исчезнувших элементов списка в качестве новых элементов списка, чтобы избежать длительной операции их создания.Вам нужно создать свой собственный класс на основе ListView, чтобы реализовать эти приемы.Подробнее здесь .

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