ListView的优化
不优化
每次都执行getView(),都会执行converterView=View.inflate(R.layout.xxx);
问题:效率低,在快速滑动时会有卡顿,在数据很多时甚至会内存溢出,,
第一层:复用converterView
if(converterView==null){
converterView=ViewView.inflate(R.layout.xxx);//n+1
}
问题:每次执行getView()都需要执行converterView.findViewByid()得到子View
第二层:使用ViewHolder,减少findViewByid()的次数
// 1.创建或得到对应当前行的一个Viewholder对象
ViewHolder hole=null;
if(convertView==null){
// 加载布局Item的布局,得到View对象
convertView = View.inflate(MainActivity.this, R.layout.item_array_adapter, null);
hole=new ViewHolder();
hole.findViewById = (ImageView) convertView.findViewById(R.id.imageView1);
hole.view = (TextView) convertView.findViewById(R.id.tv_item_name);
hole.view1 = (TextView) convertView.findViewById(R.id.tv_item_content);
// 将holder对象保存到converterView上
convertView.setTag(hole);
}else{
hole=(ViewHolder)convertView.getTag();
}
// 根据position设置对应的数据
// 得到当行的数据对象
shoinfo shoinfo = data.get(position);
// 得到子View对象
// 给ViewHolder对象的视图设置数据
hole.findViewById.setImageResource(shoinfo.getIncon());
hole.view.setText(shoinfo.getName());
hole.view1.setText(shoinfo.getContent());
return convertView;
问题1:对于互联网联网获取列表数据,如果数据量太大,一次获取出来显示,太慢太耗流量:第四层优化
问题2:对于联网获取数据,如果包含图片数据,每次都请求获取显示,太慢太流量,的三层优化
第三层:图片三级缓存处理(LRU)
1,内存缓存 优先加载,速度最快
2,本地缓存 次优先加载,速度稍快
3,网络缓存 最后加载,速度由网络速度(浪费流量)
第四层:对数据列表进行分页加载显示
1自己做:通过scroll监听
listView.setonScrolllistener(scrollListener),当到达底部时,加载下一页数据列表并显示
2使用第三方开源框架:Android-pullTorefresh或其他