Listview's ArrayAdapter notifydatasetchanged () очень медленная перерисовка

У меня довольно простой список с 3 полями текстового просмотра в каждой строке. Мы обновляем их значения каждые 2 секунды или около того с данными, поступающими из фонового вызова веб-службы (AsyncTask)

Мы сравниваем приходящие значения с текущими, обновляем их соответствующим образом на адаптере и, наконец, вызываем notifyDataSetChanged (), если необходимо

Дело в том, что перерисовка становится очень медленной, что приводит к зависанию всего пользовательского интерфейса, когда мы получаем более трех строк обновления одновременно. Конечно, мы используем все известные оптимизации ListView, такие как подход EfficientAdapter (setTag () и держатели) и getViewTypecount () / getItemViewType (). Мы также пытались максимально оптимизировать наш интерфейс с помощью layoutopt и стараемся избегать ширины и высоты wrap_content, чтобы облегчить ситуацию.

Мы также не делаем дорогостоящих операций с нашими обновлениями, только стандартные вещи: изменение текста TextView, значения textcolor и backgroundcolor.

Единственная странность, которую я вижу, это то, что getView () вызывается 3-4-5 раз для каждой строки, хотя я читал все сообщения Ромена [1], говорящие, что все в порядке с этим

Есть идеи или намеки на то, как мы можем это ускорить?

Большое спасибо!

[1] http://groups.google. com / group / android-developers / browse_thread / thread / 4c4aedde22fe4594 / aeb04288064f495e? show_docid = aeb04288064f495e

6
задан Albert 28 September 2010 в 07:20
поделиться