ListView性能优化——convertView&viewHolder

来源:互联网 发布:雷洋事件知乎 编辑:程序博客网 时间:2024/06/06 10:41
ListView优化大致从以下几个角度:
1.复用已经生成的convertView;
2.添加viewHolder类;
3.缓存数据(图片缓存);
4.分页加载。

 

具体方案:

1、如果自定义适配器,那么在getView方法中要考虑方法传进来的参数contentView是否为null,如果为null就创建contentView并返回,如果不为null则直接使用。在这个方法中尽可能少创建view。

2、给contentView设置tag(setTag()),传入一个viewHolder对象,用于缓存要显示的数据,可以达到图像数据异步加载的效果。

3、如果listview需要显示的item很多,就要考虑分页加载。比如一共要显示100条或者更多的时候,我们可以考虑先加载20条,等用户拉到列表底部的时候再去加载接下来的20条。

 

item高度问题

ListView一般item高度都是固定的,但也存在着item高度不固定的情况,譬如微博、微信、QQ空间的消息展示页面,那么在ListView的adapter运行上就会有细微差别:

因为没有固定的Item高度,无法计算一个屏幕中能够显示的最大高度,系统会会先创建一个View,第一轮是用这个View来试探能放多少个item,试探出结果可以放3个Item,所以第二轮的0-2才是真正创建的View,屏幕上显示了3个Item。当往下滚时,Item0没有完全出去,下面有来了个Item3,所以这时的Item有创建了一个View,屏幕上此时显示4个Item。之后4个Item就是做多显示的数量,再往上滚动,convertView就开始重用了,Item4和Item0的View是一个对象。其中的差别在于item的初始化数和最大运行数不一定一样。

http://blog.fangjie.info/2014/05/14/ListView的性能优化之convertView和viewHolder/

http://www.cnblogs.com/xiaowenji/archive/2010/12/08/1900579.html

http://android.amberfog.com/?p=296

0 0
原创粉丝点击