ListView的优化
ListView的优化
不优化
每次都执行getView(),都会执行converterView=View.inflate(R.layout.xxx);
问题:效率低,在快速滑动时会有卡顿,在数据很多时甚至会内存溢出,,
第一层:复用converterView
【ListView的优化】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或其他
推荐阅读
- 热闹中的孤独
- JAVA(抽象类与接口的区别&重载与重写&内存泄漏)
- 放屁有这三个特征的,请注意啦!这说明你的身体毒素太多
- 一个人的旅行,三亚
- 布丽吉特,人生绝对的赢家
- 慢慢的美丽
- 尽力
- 一个小故事,我的思考。
- 家乡的那条小河
- 《真与假的困惑》???|《真与假的困惑》??? ——致良知是一种伟大的力量