`
heisedeyueya
  • 浏览: 96694 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类

ListView性能优化系列之一

阅读更多
ListView性能优化之一

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

下集预告:这一小节从表面上讲了性能提高的方法,下一小节将从listview的源码中探寻convertView是如何被回收利用的
问题
  • 当列表中有成千上万条记录的时候,如果每一条记录都去new 一个view的话,就会发生oom

解决问题:通过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;
	}

综上:
1、因为不用每次调用getView的时候都inflate一个view出来,所以从速度上更快,并且内存也得到了优化。
2、由于通过ViewHolder保存了对控件的引用,不要每次都去调用findviewbyId(),也更加的方便快捷
日志分析
1、首先运行程序,观察日志输出

2、拖动listview,直到第一项完全消失在屏幕可见区域,神奇的事情发生了



3、继续拖动listView我想你应该明白了。。。
  • 大小: 12.5 KB
  • 大小: 18.3 KB
分享到:
评论

相关推荐

    android开发资料大全

    Android应用开发者指南:性能优化 android开发教程合集(推荐新手看下这一季教程) 新手入门 会员贡献电子图书整理(内含PDF下载) Android平板开发需要注意的几点 Android3D游戏开发付费视频教程共享(更新第四集)...

    asp.net知识库

    Asp.net 2.0功能体验,细节之Web控件(一) 隐藏控件 Asp.net 2.0功能体验,总体设计思想 Asp.net 2.0 WebPart使用经验点滴 革新:.NET 2.0的自定义配置文件体系初探 关于如何在ASP.NET 2.0中定制Expression ...

    JAVA上百实例源码以及开源项目

    J2ME优化压缩PNG文件 4个目标文件 内容索引:JAVA源码,综合应用,J2me游戏,PNG,图形处理  这是个J2ME控制台程序,它能剔除PNG文件中的非关键数据段,减少文件大小从而达到压缩图片的目的。而图片的质量并不会受到损失...

    JAVA上百实例源码以及开源项目源代码

    J2ME优化压缩PNG文件 4个目标文件 内容索引:JAVA源码,综合应用,J2me游戏,PNG,图形处理  这是个J2ME控制台程序,它能剔除PNG文件中的非关键数据段,减少文件大小从而达到压缩图片的目的。而图片的质量并不会受到损失...

Global site tag (gtag.js) - Google Analytics