android中关于listView的优化以及适配器的合理使用

在android开发中经常会用到listView以及GridView等控件,此类控件在数据设置方面一般都是通过Adapter来实现的,当数据量小的时候不会涉及到时间的优化,但是当一些数据量比较大并且item控件自定义比较复杂的情况下就需要考虑性能的优化,虽然现如今的android手机运行内存都比较大,但是作为一个有节操、有修养的程序员,我们不仅仅是需要实现功能,同时也需要考虑性能等等的问题,这样有助于编写出优秀的代码,并且对于我们以后的提高很有帮助。。。。。。。那么在listview中如何优化呢?

在对于listView 中的优化我们分为两部分:

  1. 对于listView中item的重用进行优化

  2. 对于item中的子控件的获取进行时间上的优化

首先我们先来看看在通常情况下,对listview赋值时的Adapter的编写方法

效率最慢,内存消耗最多


View view =.inflate(R.layout.)ImageView imageView = (ImageView) view.findViewById(R.id.)TextView title = (TextView) view.findViewById(R.id.)TextView content = (TextView) view.findViewById(R.id.)itemBean itemBean = .get(position)imageView.setImageResource(itemBean.getImageRec())title.setText(itemBean.getTitle())content.setText(itemBean.getContent())view

效率慢,内存消耗较少


 
if (convertView == null) {
    convertView = inflater.inflate(R.layout.item, null);
}
ImageView image = (ImageView) convertView.findViewById(R.id.image);
TextView title = (TextView) convertView.findViewById(R.id.title);
TextView content = (TextView) convertView.findViewById(R.id.centent);
itemBean itembean = itemBeanList.get(position);
image.setImageResource(itembean.getImageRec());
title.setText(itembean.getTitle());
content.setText(itembean.getContent());

return convertView;

效率最快,内存消耗最少


 ViewHoler viewholder;
if (convertView==null){
    convertView = inflater.inflate(R.layout.item,null);
     viewholder = new ViewHoler();
    viewholder.image = (ImageView) convertView.findViewById(R.id.image);
    viewholder.title = (TextView) convertView.findViewById(R.id.title);
    viewholder.content =(TextView) convertView.findViewById(R.id.centent);
    convertView.setTag(viewholder);
}else {
    viewholder = (ViewHoler) convertView.getTag();
}
itemBean itembean = itemBeanList.get(position);
viewholder.image.setImageResource(itembean.getImageRec());
viewholder.title.setText(itembean.getTitle());
viewholder.content.setText(itembean.getContent());
return convertView;


class ViewHoler{
public  ImageView image;
public TextView title;
public TextView content;
}

对于以上三种方式,建议在开发中尽量使用第三种方式,那么为什么这样建议,通过以上代码我们并不能直观的判断出那种方式效率最高,那种方式最优化,下面通过将此三种方式运行在同平台下,同数据量的同时使用的时间打印出来,通过时间我们可以非常直观的看出那种效率最高

打印每种代码在相同平台以及相同的数据量的情况下执行的时间:

long start = System.nanoTime();
/*
具体的代码执行,及以上的三种方式的代码

*/
long end = System.nanoTime();
long time = end - start;
userTime += time;
Log.d("time", String.valueOf(userTime));

通过打印时间,并且对时间的比较

  3  <  2  <1

所以方法3 是最优化的方式



转载于:https://my.oschina.net/xiaohundan/blog/406116

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值