ListView优化
2016-09-03 18:48
225 查看
第0层: 不优化:
每次执行getView(), 都会执行: converterView = View.inflate(R.layout.xxx);
问题: 效率太低, 在快速滑动时会有卡顿, 在数据很多时甚至会内存溢出
第一层: 复用converterView
if(converterView==null) {
converterView = View.inflate(R.layout.xxx); //n+1
}
问题: 每次执行getView()都需要执行converterView.findViewById()得到子View ImageView
第二层: 使用ViewHolder, 减少findViewById()的次数
Viewholder holder = null;
if(converterView==null) {
converterView = View.inflate(R.layout.xxx);
holder = new ViewHolder();
holder.imageView = (ImageView)converterView.findViewById(xxx);
holder.textView = (TextView)converterView.findViewById(yyy);
converterView.setTag(holder);
} else {
holder = (Viewholder )converterView.getTag();
}
Person p = data.get(position);
holder.imageView.setimage(p.getIcon())
holder.textView.setText(p.getName())
static class ViewHolder {
ImageView imageView;
TextView textView;
}
//json: [{}, {}]
问题1: 对于联网获取列表数据, 如果数据量太大(比如超过100000条甚至更多), 一次获取出来显示, 太慢太耗流量: 第四层优化
问题2: 对于联网获取列表数据, 如果包含图片数据, 每次都请求获取显示, 太慢太耗流量: 第三层优化
第三层优化: 图片三级缓存处理
参见图片三级缓存机制
第四层: 对数据列表进行分页加载显示
1). 自己做: 通过Scroll监听listView.setonScrollListener(scrollListener), 当到达底部时加载下一页列表数据并显示
2). 使用第三方开源框架: Android-PullToRefresh或其它
listview.setpadding(l,t,r,b)//设置ListView位置
listview.setDividerHeight(0);//去掉ListView的线条
listview.setCacheColorHint(Color,TRANSPARENT);//低版本屏幕按下变色
listview.setfadingedge(none)模糊
每次执行getView(), 都会执行: converterView = View.inflate(R.layout.xxx);
问题: 效率太低, 在快速滑动时会有卡顿, 在数据很多时甚至会内存溢出
第一层: 复用converterView
if(converterView==null) {
converterView = View.inflate(R.layout.xxx); //n+1
}
问题: 每次执行getView()都需要执行converterView.findViewById()得到子View ImageView
第二层: 使用ViewHolder, 减少findViewById()的次数
Viewholder holder = null;
if(converterView==null) {
converterView = View.inflate(R.layout.xxx);
holder = new ViewHolder();
holder.imageView = (ImageView)converterView.findViewById(xxx);
holder.textView = (TextView)converterView.findViewById(yyy);
converterView.setTag(holder);
} else {
holder = (Viewholder )converterView.getTag();
}
Person p = data.get(position);
holder.imageView.setimage(p.getIcon())
holder.textView.setText(p.getName())
static class ViewHolder {
ImageView imageView;
TextView textView;
}
//json: [{}, {}]
问题1: 对于联网获取列表数据, 如果数据量太大(比如超过100000条甚至更多), 一次获取出来显示, 太慢太耗流量: 第四层优化
问题2: 对于联网获取列表数据, 如果包含图片数据, 每次都请求获取显示, 太慢太耗流量: 第三层优化
第三层优化: 图片三级缓存处理
参见图片三级缓存机制
第四层: 对数据列表进行分页加载显示
1). 自己做: 通过Scroll监听listView.setonScrollListener(scrollListener), 当到达底部时加载下一页列表数据并显示
2). 使用第三方开源框架: Android-PullToRefresh或其它
listview.setpadding(l,t,r,b)//设置ListView位置
listview.setDividerHeight(0);//去掉ListView的线条
listview.setCacheColorHint(Color,TRANSPARENT);//低版本屏幕按下变色
listview.setfadingedge(none)模糊
相关文章推荐
- android TraceView使用以及listview 的性能优化测试(一)
- 使用ViewHolder优化ListVIew
- ListView的性能优化之convertView和viewHolder
- android listview优化及其解释
- day4.06总结_Adapter自定义和优化和ListView
- ListView常见的优化方式简述
- ListView优化
- Android之listview优化+分类显示
- 新闻布局加其网络获取实现(ListView 的再次优化 )
- 面试之 listview优化
- ListView的性能优化之convertView和viewHolder
- 【Android】使用自定义Adapter优化ListView、修改数据及控件内部布局
- ListView优化总结
- Listview:性能优化,三级缓存,二次采样
- ListView优化总结(一)--Android
- Android就业面试技巧系列-技术篇7 (ListView优化)
- ListView 的优化
- Android学习笔记:ListView优化基本方法
- 老生常谈ListView优化
- 对ListView进行优化,加载大数据量或者包含图片信息的时候滚屏加载