У меня довольно простой список с 3 текстовыми полями в каждой строке. Мы обновляем их значения каждые 2 секунды или около того с данными, поступающими из фонового вызова веб-службы (AsyncTask)
Мы сравниваем поступающие значения с текущими, обновляем их соответствующим образом на адаптере и, наконец, при необходимости вызываем notifyDataSetChanged ()
Дело в том, что перерисовка становится очень медленной, что приводит к зависанию всего пользовательского интерфейса, когда мы получили более 3 строк обновления одновременно. Конечно, мы используем все известные оптимизации ListView, такие как подход EfficientAdapter (setTag () и holders) и 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