ListView性能优化系列之一

[size=large][align=center][b]ListView性能优化之一[/b][/align][/size]
[size=small] 不知不觉,都已经正式工作三个月了,这几天将工作中学习的知识进行一个小小的总结,ListView是android中一个非常常用的空间,下面就对ListView控件的性能优化做一点儿分享,由于内容相对有点儿多,我会分为几篇文章进行分享,希望对同学们有帮助,个人愚见,请保持怀疑的眼光阅读。[/size]

[size=x-large][b]下集预告:[/b][/size]这一小节从表面上讲了性能提高的方法,下一小节将从listview的源码中探寻convertView是如何被回收利用的
[size=x-large][b]问题[/b][/size]
[list]
[*]当列表中有成千上万条记录的时候,如果每一条记录都去new 一个view的话,就会发生oom
[/list]
[size=x-large][b]解决问题:[/b][/size]通过view的复用来解决这一问题,用户之需要关心在屏幕之内看得见的部分就可以了,所以不在屏幕中的部分可以回收利用。

@Override
public View getView(int position, View convertView, ViewGroup parent) {
Log.d(TAG, "position=" + position + ",convertView=" + convertView);
ViewHolder viewHolder = null;// 保存控件的引用,不用每次都调用findviewById(...)
if (convertView == null) {// 只有当convertView为空的时候,才去创建
convertView = LayoutInflater.from(mContext).inflate(
R.layout.list_item, null);// 这个过程相当耗时间
viewHolder = new ViewHolder();
viewHolder.mTextView = (TextView) convertView
.findViewById(R.id.tv_tips);
viewHolder.mImageView = (ImageView) convertView
.findViewById(R.id.iv_image);
convertView.setTag(viewHolder);
} else {// 利用回收回来的view
viewHolder = (ViewHolder) convertView.getTag();
}
viewHolder.mTextView.setText("-----" + position);
return convertView;
}

class ViewHolder {
TextView mTextView;
ImageView mImageView;
}

[size=large][b]综上:[/b][/size]
1、因为不用每次调用getView的时候都inflate一个view出来,所以从速度上更快,并且内存也得到了优化。
2、由于通过ViewHolder保存了对控件的引用,不要每次都去调用findviewbyId(),也更加的方便快捷
[b]日志分析[/b]
1、首先运行程序,观察日志输出
[img]http://dl.iteye.com/upload/attachment/0074/6104/89bdf3f6-e3c7-3957-8d8e-62835a9da495.png[/img]
2、拖动listview,直到第一项完全消失在屏幕可见区域,神奇的事情发生了


[img]http://dl.iteye.com/upload/attachment/0074/6106/06188d5f-5053-3abc-b42b-006811ad7bb8.png[/img]
3、继续拖动listView我想你应该明白了。。。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值