ListView优化

本文详细介绍了在Android开发中针对ListView性能的多级优化方案,包括减少findViewById调用、图片三级缓存处理、数据分页加载等技术,有效解决大量数据加载时的效率与资源消耗问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  1. 第0层: 不优化:
    每次执行getView(), 都会执行: converterView = View.inflate(R.layout.xxx);
    问题: 效率太低, 在快速滑动时会有卡顿, 在数据很多时甚至会内存溢出
  2. 第一层: 复用converterView
    if(converterView==null) {
    converterView = View.inflate(R.layout.xxx); //n+1
    }

    问题: 每次执行getView()都需要执行converterView.findViewById()得到子View ImageView

  3. 第二层: 使用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: 对于联网获取列表数据, 如果包含图片数据, 每次都请求获取显示, 太慢太耗流量: 第三层优化

  4. 第三层优化: 图片三级缓存处理
    参见图片三级缓存机制
  5. 第四层: 对数据列表进行分页加载显示
    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)模糊
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值