ListView的优化
2016-05-15 17:19
288 查看
0. 第0层: 不优化:
每次执行getView(), 都会执行: converterView = View.inflate(R.layout.xxx);
问题: 效率太低, 在快速滑动时会有卡顿, 在数据很多时甚至会内存溢出
1. 第一层: 复用converterView
if(converterView==null) {
converterView = View.inflate(R.layout.xxx); 10-->11
}
问题: 每次执行getView()都需要执行converterView.findViewById()得到子View
2. 第二层: 使用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();
}
static class ViewHolder {
ImageView imageView;
TextView textView;
}
问题1: 对于联网获取列表数据, 如果数据量太大(比如超过100条甚至更多), 一次获取出来显示, 太慢太耗流量
问题2: 对于联网获取列表数据, 如果包含图片数据, 每次都请求获取显示, 太慢太耗流量
3. 第三层: 对数据列表进行分页加载显示
1). 自己做: 通过Scroll监听listView.setonScrollListener(scrollListener), 当到达底部时加载下一页列表数据并显示
2). 使用第三方开源框架: Android-PullToRefresh或其它
每次执行getView(), 都会执行: converterView = View.inflate(R.layout.xxx);
问题: 效率太低, 在快速滑动时会有卡顿, 在数据很多时甚至会内存溢出
1. 第一层: 复用converterView
if(converterView==null) {
converterView = View.inflate(R.layout.xxx); 10-->11
}
问题: 每次执行getView()都需要执行converterView.findViewById()得到子View
2. 第二层: 使用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();
}
static class ViewHolder {
ImageView imageView;
TextView textView;
}
问题1: 对于联网获取列表数据, 如果数据量太大(比如超过100条甚至更多), 一次获取出来显示, 太慢太耗流量
问题2: 对于联网获取列表数据, 如果包含图片数据, 每次都请求获取显示, 太慢太耗流量
3. 第三层: 对数据列表进行分页加载显示
1). 自己做: 通过Scroll监听listView.setonScrollListener(scrollListener), 当到达底部时加载下一页列表数据并显示
2). 使用第三方开源框架: Android-PullToRefresh或其它
相关文章推荐
- poj 1458 Common Subsequence
- solr5.5的搭建,以及第一个core的配置
- MarkDown的初次学习使用。
- 搭建git linux 服务器
- 大公司c#&.net转型java的原因有哪些?
- 华中农业大学第四届程序设计大赛网络同步赛Problem I: Catching Dogs
- spark cogroup操作
- 简单DP+暴力 POJ 1050
- ubuntu 14.04 64bit 安装 oracle 11g r2
- 第十一周进度条
- 关于软件测试的术语
- TMS320F28335学习笔记——DMA
- linux企业常用服务---lvs+Keepalived高可用集群
- JavaSE_Set遍历的2种方法
- 网页布局-12种常见布局
- CAN与CANOpen(五)
- B转换KB,MB,GB的方法
- signal和sigaction的分析比较
- 最全面的常用正则表达式大全
- Activity与service的生命周期及其关系