Listview的ArrayAdapter notifydatasetchanged()非常慢的重绘

Alb*_*ert 6 performance android listview redraw android-arrayadapter

我有一个非常简单的列表,每行有3个textview字段.我们使用来自后台webservice调用(AsyncTask)的数据每2秒左右更新一次它们的值

我们将即将到来的值与当前值进行比较,在Adapter上相应地更新它们,最后如果需要调用notifyDataSetChanged()

问题是,当我们一次获得超过3个更新行时,重绘变得非常慢,从而挂起整个UI.当然,我们使用所有ListView众所周知的优化,例如EfficientAdapter方法(setTag()和holder),以及getViewTypecount()/ getItemViewType().我们还尝试使用layoutopt尽可能地优化我们的界面,并尝试避免wrap_content宽度和高度来减轻负担.

我们不会对我们的更新执行昂贵的操作,只是标准的东西:更改TextView文本,textcolor和backgroundcolor值.

我能看到的唯一奇怪的事情就是每行调用getView()3-4-5次,虽然我已经阅读了所有那些Romain的消息[1],告诉他们没有错

关于如何加快速度的任何想法或提示?

非常感谢你!

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

Jay*_*ave 0

我想您可以将标签设置为您的 textView 作为从中获取更新的 url。您可以尝试对该视图使用 findViewByTag(update URL) 和 setText,而不是调用“notifyDataSetChanged()”,这样 textview 只会被重新绘制,而不是一遍又一遍地重新绘制整个列表。将充分减少额外重涂的次数。只是一个想法。