第0层:
不优化
每次都会执行getView(),都会执行 convertView=View.inflate(R.layout.XXX);
问题:效率太低,再快速滑动时会有卡顿,在数据多的时候甚至内存溢出
第1层:
复用convertView
if(convertView==null){
convertView=View.inflate(R.layout.XXX); //n+1
}
问题: 每次执行getview()都需要执行convertView.findViewByid()得到子view
第二层:
使用ViewHolder,减少findViewByid()的次数 减到n+1次
ViewHolder holder=null;
if(convertView==null){
convertView=View.inflate(R.layout.XXX); //n+1
holder=new ViewHolder();
holder.imageView=(ImageView)convertView.findViewById(xxx);
holder.textView=(TextView)convertView.findViewById(yyy);
convertView.setTag(holder);
}else{
holder=(ViewHolder)convertView.getTag();
}
person p= data.get(position);//之前创建的类
holder.imageView.setImageResource(p.getIco());
holder.textView.setText(p.getName());
static class ViewHolder(){
ImageView imageView;
TextView textView;
}
问题1:
对于联网获取列表数据,如果数据量太大(比如超过100000)条甚至更多一次取出来显示,太慢太消耗流量
问题2.对于联网获取列表数据,如果包含图片数据,每次请求获取显示,太慢太耗流量
第三层:
图片三级缓存处理(LRu算法)
1.内存缓存,优先加载,速度最快
2.本地缓存,次优先加载。速度稍快
3.网络缓存,最后加载,速度由网络速度决定(浪费流量)
第4层:
对数据列表进行分页加载显示
1.自己做:通过Scroll监听
listView。setOnScrollListener(scrollListenter),当到达底部时加载下一页列表数据并显示
2.使用第三方开源框架:Aandroid-PullToRefresh或其他
网友评论