ListView优化之道
来源:互联网 发布:精英主义知乎 编辑:程序博客网 时间:2024/05/01 14:52
菜鸟刚入行时,写ListView时会写成下面这样,在滑动时会发现很卡,特别是数据多的时候。这时候就需要优化了。怎么优化?接着看。
@Overridepublic View getView(int position, View convertView, ViewGroup parent) { //省略获取数据操作 //视图绑定操作 convertView=View.inflate(MainActivity.this, R.layout.item, null); TextView tvTitle = convertView.findViewById(R.id.tv_title); //省略数据绑定操作 return convertView;}
有哪些需要优化的?
- 视图膨胀操作(inflate),耗时
convertView=View.inflate(MainActivity.this, R.layout.item, null);
- 控件查找操作(findViewById),耗时
TextView tvTitle = convertView.findViewById(R.id.tv_title);
怎么看出来的?
- 亲手体验
- 使用Eclipse的DDMS视图查看Heap内存使用和回收情况
- 使用sdk/tools/hierarchyviewer.bat查看视图树
怎么优化?
1. 使用视图回收器,减少inflate操作,降低视图频繁创建和回收对性能的影响
视图回收器不是别的,就是covertView。当原本可见的视图因滑动操作变得不可见时,系统会自动回收,转化成convertView供复用。使用了convertView后的代码如下:
@Overridepublic View getView(int position, View convertView, ViewGroup parent) { //省略获取数据操作 //视图绑定操作 if(convertView==null){ convertView=View.inflate(MainActivity.this, R.layout.item, null); } TextView tvTitle = convertView.findViewById(R.id.tv_title); //省略数据绑定操作 return convertView;}
2. 使用视图持有者,减少findViewById操作(对视图树节点的查找),以内存空间换取时间,提高ListView加载速度
所谓的ViewHolder其实就是一个JavaBean对象,里面存放着本来需要findViewById的控件(一个View绑定一个ViewHolder),这样做回占用一定的内存,但是没有了视图查找操作,视图的加载变快了,当数据很多或者频繁滑动时性能提升很明显。使用了ViewHolder后的代码如下:
@Overridepublic View getView(int position, View convertView, ViewGroup parent) { //省略获取数据操作 //视图绑定操作 ViewHolder holder=null; if(convertView==null){ holder = new ViewHolder(); convertView=View.inflate(MainActivity.this, R.layout.item, null); holder.tvTitle = convertView.findViewById(R.id.tv_title); //打标签,意思是把convertView装进holder里,让它持有 convertVIew.setTag(holder); } //获取标签,意思是把holder拿出来 holder = (ViewHolder)convertView.getTag(); //从holder中拿出view TextView tvTitle = holder.tvTitle; //省略数据绑定操作 //VieHolder class ViewHolder { public TextView tvTitle; } return convertView;}
1 0
- ListView优化之道
- Android之ListView优化
- Android之ListView优化
- ListView学习之优化
- ListView优化之ViewHolder
- Andorid之ListView优化
- android 之listview的优化
- Android ListView 之效率优化
- Android详解之ListView优化
- Android之ListView性能优化
- ListView优化之ViewType使用
- android之listview内存优化
- Android之ListView的优化
- 黑名单之Listview的优化
- Android之ListView性能优化
- Android 之如何优化ListView
- Listview优化之convertView,viewHolder
- Android之ListView性能优化
- log4j 每天生产一个日志文件配置方法
- 视频播放器
- 小需求:批量导入Oracle数据源的字段注释到Informatica资料库
- 自定义控件之TopBar
- Android中书名号的显示,以及在String中改变部分字符的颜色
- ListView优化之道
- 牛客网 | 叠罗汉I && II
- 一天的总结(2016/01/12)
- java访问未验证证书的HTTPS
- EditText的详细使用
- HDU 1024 Max Sum Plus Plus (最大子序和)
- go语言学习-接口(interface)
- CocoaPods的安装和使用
- 分享一个链接