ListView getView () называется слишком часто

У меня есть ListView с пользовательским Adapter . Честно говоря, у меня много из них одновременно на экране, и мое устройство Tegra 3 начало задерживаться, что меня действительно смутило … Я нашел, что в каждом Adapter getView() метода getView() вызывается Все видимые строки каждый раз, когда анимация запускается на экране. Это дает мне несколько сотен вызовов в секунду! Выкапывая больше, большинство этих вызовов связано с вызовами measure() и onMeasure() ListView , и – это tke-ключ – они бесполезны, потому что все макеты моего ListView имеют размер const.

Поэтому мой вопрос: как устранить эти призывы? Конечно, я хочу оставить только собственные вызовы (вызванные добавлением элементов в Adapter и notifyDataSetChanged() ).

Я пробовал почти все, но либо весь список не нарисовал себя (когда я переопределяю его onMeasure() и вынужден возвращать const size без вызова super.onMeasure() ) или перестает обновляться в какое-то время.

Как вы реализовали метод getView ()? Если вы его правильно реализуете, то почти не будет отставания.

Проверьте это действительно хорошее видео:

Как сказал Ромен, работайте с ним не против него. Лучше всего оставить меру () самостоятельно и сосредоточиться на своем адаптере.

То, как реализуется ListView . Я не думаю, что это приведет к повышению производительности. Если вы там делаете правильно.

Например..

Не LayoutInflator внутри метода GetView, делайте это на уровне класса.

И Inflate View Only, только если convertView==null или просто возвращает convertView .. Вздутие – это дорогостоящий процесс ….

Основная причина этого в том, что ListView.onMeasure() вызывает AbsListView.obtainView() , который запрашивает представление из вашего адаптера списка. Поэтому, если ваше представление переоценивается с помощью анимации, ваша производительность будет очень плохой.

Ну, как вы сказали, эти вызовы вызваны вызовами measure() и onMeasure() родительских onMeasure() ListViews и я уверен, что вы используете height=wrap_content с помощью wrap_content по высоте ваш ListView будет проверять без остановки, если ваша высота изменилась.

Таким образом, решение состоит в том, чтобы установить height=fill_parent . Надеюсь, это вам помогло.