ListView优化

第0层

不优化

每次都会执行getView(),都会执行  convertView=View.inflate(R.layout.XXX);

问题:效率太低,再快速滑动时会有卡顿,在数据多的时候甚至内存溢出

第一层
复用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或其他

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章