Listview视图缓存优化

本文详细阐述了ListView视图优化的三个关键步骤:复用convertView以减少加载view的数量;创建view容器ViewHolder来封装Item中的view,避免重复查找;通过使用static修饰ViewHolder类以减少内存加载开销。通过实施这些建议,可以显著提升UI响应速度和应用性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

	/**
	 * 加工ListView中的条目
	 */
	@Override
	public View getView(final int position, View convertView, ViewGroup parent) {

		// 刚开始会先加载页面能够容纳个数的View,在往下翻会再加载一个,之后便会使用缓存的。
		// 加载View与View中的控件
		View view;
		ViewHolder holder;
		// 判断之前是否已经加载过
		if (convertView != null) {
			// 如果已经加载过View,那么使用缓存
			view = convertView;
			// 得到view容器
			holder = (ViewHolder) view.getTag();
		} else {
			// 如果没有加载过View,加载
			view = View.inflate(CallSmsSafeActivity.this,
					R.layout.list_callsmssafe_item, null);
			// 加载控件,给view容器设置控件
			holder = new ViewHolder();
			holder.tv = (TextView) view.findViewById(R.id.tv);

			holder.iv = (ImageView) view.findViewById(R.id.iv);
			// 设置标签,使View对象与容器关联
			view.setTag(holder);
		}
		
		//给控件设置内容
		holder.tv.setText(phone);
		holder.iv.setImageBitmap(bm);

		return view;
	}


	

	/**
	 * 缓存Item中的控件,Item中view的容器
	 */
	static class ViewHolder {
		TextView tv
		ImageView iv;
	}


说明:
ListView的视图优化可分为三步。
1.复用convertView,减少加载view。 
  如果convertView为空,那么说明还没有生成listview,需要加载页面中能看到个数的view。
  如果convertView不为空,这时已经生成了listview,并且可以复用convertView。

  if (convertView != null) {
	view = convertView;
  }else{
	view = View.inflate(xxx);
  }

2.编写view容器ViewHolder,将Item中的view添加到容器中。
  因为如果每次通过view.findViewById方法查找Item身上的控件,会非常消耗资源。
  所以可以使用一个view容器,在加载Item时,把所有的view添加进容器中,然后设置给item。
  后面再次复用Item时就不必每次查找view了而是直接使用容器中的view。

        if (convertView != null) {
		
		view = convertView;
		// 得到view容器
		holder = (ViewHolder) view.getTag();
	} else {
	
		view = View.inflate(CallSmsSafeActivity.this,R.layout.list_callsmssafe_item, null);
		// 加载控件,给view容器设置控件
		holder = new ViewHolder();
		holder.tv = (TextView) view.findViewById(R.id.tv);
		holder.iv = (ImageView) view.findViewById(R.id.iv);
		// 设置标签,使View对象与容器关联
		view.setTag(holder);
	}

3.ViewHolder类用static修饰
  如果是非静态的累,在一开始加载可见Item个数的时候,每次都会讲该类字节码加载到内存。
  如果使用static修饰,那么只需要将字节码加载到内存一次即可。

基于Spring Boot搭建的一个多功能在线学习系统的实现细节。系统分为管理员和用户两个主要模块。管理员负责视频、文件和文章资料的管理以及系统运营维护;用户则可以进行视频播放、资料下载、参与学习论坛并享受个性化学习服务。文中重点探讨了文件下载的安全性和性能优化(如使用Resource对象避免内存溢出),积分排行榜的高效实现(采用Redis Sorted Set结构),敏感词过滤机制(利用DFA算法构建内存过滤树)以及视频播放的浏览器兼容性解决方案(通过FFmpeg调整MOOV原子位置)。此外,还提到了权限管理方面自定义动态加载器的应用,提高了系统的灵活性和易用性。 适合人群:对Spring Boot有一定了解,希望深入理解其实际应用的技术人员,尤其是从事在线教育平台开发的相关从业者。 使用场景及目标:适用于需要快速搭建稳定高效的在线学习平台的企业或团队。目标在于提供一套完整的解决方案,涵盖从资源管理到用户体验优化等多个方面,帮助开发者更好地理解和掌握Spring Boot框架的实际运用技巧。 其他说明:文中不仅提供了具体的代码示例和技术思路,还分享了许多实践经验教训,对于提高项目质量有着重要的指导意义。同时强调了安全性、性能优化等方面的重要性,确保系统能够应对大规模用户的并发访问需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值