以前对于ListView的优化紧紧加了个viewholder,后来在共工作中发现ListView的优化其实还有很多工作需要做。下面总结如下:
第一个条建议.viewholder的使用,这个就不说了基本上都知道为什么以及怎么实现,但是需要提醒一点,有的时候使用viewholder会出现一些问题,比如在getView方法中进行些判断来选择使用什么内容来更新UI。很容易出现的一种情况是判断范围没有完全覆盖到可能出现的情况,于是就可能会使用前一个(或前一组)ITEM中的viewholder,导致出现错误的UI。
第二个条建议.在getView方法中尽量减少使用逻辑。以前我会把所有逻辑业务都放到getView里面进行处理,后来发现这样做和另外一种方法比起来的确很耗费资源,那就是在准备数据源的时候将每一个item中需使用的数据经过逻辑处理一遍,从而使getView中只是完成简单的赋值。
第三个条建议.尽量减少GC调用。对于listview来说减少GC我现在只能做到在getView里不更多创建新的对象。尽量做到只在一开始创建一组viewholer,后面就一直复用这几个对象,这也是第二条建议提出的一个原因。
第四条建议.加载图片时尽量做到滑动停止在加载。这个也很简单就是添加一个监听器,在回调方法中判断是否滑动停止。
具体使用的图片加载器可能不尽相同,里面对于图片的处理也有很多选项。具体情况具体分析。反正归根结底一条,在getView方法里尽量做减法。