ListView的优化

来源:互联网 发布:csdn php 编辑:程序博客网 时间:2024/06/06 01:27
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或其它
0 0